簡體   English   中英

如何在對象數組中獲取對象的索引?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM