2010-08-17 71 views

回答

3

您可以使用Array filter方法,該方法返回包含所有匹配元素的新數組。 (可能有不止一個匹配的物品)

var results = items.filter(function(obj) { return obj.ITEM == 1; }); 
for (var i = 0; i < results.length; i++) 
    alert(results[i].AMOUNT); 

注意,IE6(我不知道新版本)不支持filter方法。如果它不存在,您可以自己定義它:

if (typeof Array.prototype.filter == 'undefined') 
    Array.prototype.filter = function(callback) { 
    var result = []; 
    for (var i = 0; i < this.length; i++) 
     if (callback(this[i])) 
     result.push(this[i]); 
    return result; 
    } 
+0

我最終做的是一個散列表。我是這樣做的。 (JSONObject,function(){Hashtable [this.item] = this;});所以現在我可以說: HashTable [OBJECT_I_WANT] .VALUE_I_WANT_TO_SET ='N'; – colemande 2010-08-20 19:38:59

5

您正在創建一個對象數組。如果項目被插入順序,您可以使用:

items[0].AMOUNT; // return the amount of the first item in the array 

但是,(使用普通的JavaScript),你可以很可能更願意利用JavaScript對象的哈希表的性質,並使用這樣的:

var items = { 
    item1: { 
     amount: 10 
    }, 
    item2: { 
     amount: 20 
    } 
}; 

然後你就可以使用任一標符號:

items['item1'].amount; 

...或點號:

items.item1.amount; 

@casablanca's solution是一個有效的替代方案,但要注意,filter()方法在O(n)由於供給選擇器被抵靠數組的每個元素進行測試運行。另一方面,散列表中的項目可以在O(1)(恆定時間)中找到。

+0

這與我想要的很接近,但問題是我不知道該項目的價值是多少。 – colemande 2010-08-17 23:16:13

+0

@colemande:你能舉個例子嗎?請注意,使用下標符號,您仍然可以執行items ['item'+ 1] .amount;',您可以在其中用變量替換'1'(''item'+ 1' is string concatenation ,並返回''item1') – 2010-08-17 23:20:25

+0

我可以用你的第一個答案。但我需要能夠獲得我需要的對象的索引。任何想法如何做到這一點? VAR項= [{ ITEM :紅色, AMOUNT:10 },{ ITEM :藍色, AMOUNT:20 } { ITEM:綠色, AMOUNT:20 } ]; 如何獲取items.ITEM == green的索引? – colemande 2010-08-18 13:03:58