如何获取对象数组内的对象的索引?
问题描述:
我有对象的JavaScript阵列是这样的:如何获取对象数组内的对象的索引?
box[0] = {...}
box[1] = {...}
box[2] = {...}
...
box[499] = {...}
此目的是通过相同的构造产生的,并加入到一个循环内的阵列。这些对象在原型中有方法,它们需要知道数组中的对象索引来完成它们的工作。目前我正在做的是在每个对象中设置一个名为id
的属性,当我在循环中创建它时,它等于数组索引。事情是这样的:
box[i].id = i;
但是我因为每个我重新排序阵列时使用sort()
我已经运行的循环更新id
性能与新索引值是不完全满意。
我的问题是,如果有一种方法可以知道其中的对象索引在数组中,而不必设置id属性,希望你能帮助我。
在此先感谢。
答
我不认为数组中的对象内的函数将会知道引用它的数组的索引。
因为数组中的每个项目都只是指向内存中的那个对象,所以可能会有几十个引用同一对象的数组项,变量,对象属性等,所以函数(或包含函数)不知道你希望创建哪个后端引用。
我猜你会被卡在做你在做什么,如果你需要知道它在数组中的索引。
我想这个函数可能会调用indexOf()
针对Array,因为它返回index
,但是这需要一些开销,每次调用都需要一些额外的开销,并且您需要将它添加到不支持的浏览器中。
theArr.indexOf(this); // assuming the function was called from the context
// of the object in question
答
为什么不在每个对象上添加一个唯一属性并使用该属性来查找indexOf Object。
如果你有一个构造函数,你可以添加一个_id,然后使用查找该ID:
function getIndex(box, objectId) {
var index = box.map(function(e) { return e._id; }).indexOf(objectId);
return index;
}
如果排序的数组这甚至会工作,但你需要保持的ID是唯一的。
Array.prototype.map
在IE7或IE8上不可用。 ES5 Compatibility
顺便说一句,我不喜欢这样的解决方案,但它会在你的问题:)
工作,我想,如果对象的方法需要知道他们的对象的索引,他们不会在对象属于。它们属于单例实例或数组。 – staticsan 2011-01-21 03:15:10