簡體   English   中英

JavaScript陣列鍵查詢

[英]Javascript Array Key Lookup

很抱歉,如果以前已經有人問過這個問題,那很難找...

我想使用一個javascript數組來保存對象,並將鍵作為ID

例如,假設我有一堆人擁有不同的ID

 var people = new Array();
 var person = {property: value}; // this is person ID 4

 var people[4] = person;

我希望能夠通過說出people [ID] .propery來引用該用戶。

問題在於該數組的輸出現在是;

 null,null,null,null,object

因為期望鍵是0、1、2、3、4

我是不是很蠢? :-)我們可以正確處理字符串,那么為什么不使用非序數呢?

我要避免的是每次要訪問數組中的特定人員時都必須遍歷數組中的每個對象,因此我發現使用ID號作為鍵是可行的

多謝你們! :-)

使用字典對象

var people = {};
people[4] = 'me';

我建議您使用收藏集。 集合是對象的數組。 然后,您可以將屬性傳遞給每個人。 您可以按任何屬性過濾您的收藏集。 如此接近您的工作,但不要傳遞索引,而是傳遞每個人的id

var people = [];  // a collection

var person = {
  id: 4,
  name: 'John'
};

people.push(person);

// Filtering:

// By id
var john = people.filter(function(person) {
  return person.id == 4;
});

// By name
var john = people.filter(function(person) {
  return person.name == 'John';
});

您可以在上面抽象這些循環以重新使用它們。 另外,請確保您的ID是唯一的。 如果數據來自數據庫,那應該沒問題,否則我會在某個地方跟蹤它們。

與帶有鍵的普通對象相反,集合的優點是您可以排序和過濾,而不能保證屬性順序的對象卻不能如此簡單。

請注意, filter僅適用於“現代瀏覽器”,即IE9 +,但是對於較舊的瀏覽器有polyfills

當我們使用字符串作為鍵時,如下所示:

var people = {}; //this is an object
people[name] = 'toto';

我們正在為此對象添加新屬性,因為javascript中的每個對象都可以看作是一個哈希表。

如果使用數組,它仍然是一個對象,則可以使用字符串作為鍵向其添加屬性。 但是,如果您執行類似people[4] = 'toto'; ,您將一個字符串添加到數組中,那么數組的長度將變為5。當然,數字4仍然是此數組對象的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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