[英]How to get the index of an object inside an array of objects?
我有一個像這樣的JavaScript對象數組:
box[0] = {...}
box[1] = {...}
box[2] = {...}
...
box[499] = {...}
此對象由相同的構造函數生成,並添加到循環內的數組中。 對象在原型中有方法,需要知道數組中對象的索引才能完成它們的工作。 目前我正在做的是在循環中創建一個名為id
的屬性,當我在循環中創建它時,等於數組索引。 像這樣的東西:
box[i].id = i;
但是我對此並不完全滿意,因為每次使用sort()
重新排序數組時,我必須運行一個循環來使用新的索引值更新id
屬性。
我的問題是,如果有一種方法可以在對象內部知道它在數組中的索引 ,而不必設置id屬性,希望你能幫助我。
提前致謝。
我不認為Array中對象內的函數會知道引用它的Array的索引。
因為Array中的每個項只是指向內存中的那個對象,所以可以想象有幾十個引用同一個對象的數組項,變量,對象屬性等,所以函數(或包含該函數的對象)就不會知道你希望做哪個背面參考。
如果你需要知道它在Array中的索引,我猜你會被困在做你正在做的事情。
我想這個函數可以對Array調用indexOf()
,因為它返回一個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唯一。
在IE7或IE8上無法使用Array.prototype.map
。 ES5兼容性
順便說一句,我不喜歡這個解決方案,但它會解決你的問題:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.