我有一个像这样的JavaScript对象数组:
box[0] = {...}
box[1] = {...}
box[2] = {...}
...
box[499] = {...}
此对象由相同的构造函数生成,并添加到循环内的数组中。对象在原型中有方法,需要知道数组中对象的索引才能完成它们的工作。目前我正在做的是当我在循环内创建它时,在每个对象中设置一个名为id
的属性,等于数组索引。像这样:
box[i].id = i;
但是我对此并不完全满意,因为每次使用sort()
重新排序数组时,我都必须运行一个循环来使用新索引值更新id
属性。
我的问题是,如果有一种方法可以在对象内部知道数组中的索引,而无需设置id属性,希望你能帮助我。
提前致谢。
答案 0 :(得分:19)
我认为Array中对象内部的函数不会知道引用它的Array的索引。
因为Array中的每个项目只是指向内存中的那个对象,所以可以想象有几十个引用同一个对象的数组项,变量,对象属性等,所以函数(或包含该函数的对象) )不知道你希望做哪个背面参考。
如果你需要知道它在数组中的索引,我猜你会被困在做你正在做的事情。
我认为该函数可以针对数组调用indexOf()
,因为它返回index
,但是每次调用都需要一些开销,并且您需要为不支持的浏览器添加它。 / p>
theArr.indexOf( this ); // assuming the function was called from the context
// of the object in question
答案 1 :(得分:2)
为什么不在每个对象上添加一个唯一属性,并使用该属性来查找该对象的indexOf。
如果你有一个构造函数,你可以添加一个_id,然后使用:
查找该idfunction getIndex(box, objectId) {
var index = box.map(function(e) { return e._id; }).indexOf(objectId);
return index;
}
即使您对数组进行排序,这也会有效,但您需要保持ID唯一。
IE7或IE8上不提供 顺便说一下,我不喜欢这个解决方案,但它可以解决你的问题:)