我如何從一個JavaScript對象一個項目:我希望能夠做這樣的事如何從JavaScript對象獲取項目?
var items = [
{
ITEM:1,
AMOUNT:10
},
{
ITEM:2,
AMOUNT:20
}
];
:
$(items).filter(ITEM == 1).AMOUNT;
...這將返回10
。
我如何從一個JavaScript對象一個項目:我希望能夠做這樣的事如何從JavaScript對象獲取項目?
var items = [
{
ITEM:1,
AMOUNT:10
},
{
ITEM:2,
AMOUNT:20
}
];
:
$(items).filter(ITEM == 1).AMOUNT;
...這將返回10
。
您可以使用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;
}
您正在創建一個對象數組。如果項目被插入順序,您可以使用:
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)(恆定時間)中找到。
這與我想要的很接近,但問題是我不知道該項目的價值是多少。 – colemande 2010-08-17 23:16:13
@colemande:你能舉個例子嗎?請注意,使用下標符號,您仍然可以執行items ['item'+ 1] .amount;',您可以在其中用變量替換'1'(''item'+ 1' is string concatenation ,並返回''item1') – 2010-08-17 23:20:25
我可以用你的第一個答案。但我需要能夠獲得我需要的對象的索引。任何想法如何做到這一點? VAR項= [{ ITEM :紅色, AMOUNT:10 },{ ITEM :藍色, AMOUNT:20 } { ITEM:綠色, AMOUNT:20 } ]; 如何獲取items.ITEM == green的索引? – colemande 2010-08-18 13:03:58
我最終做的是一個散列表。我是這樣做的。 (JSONObject,function(){Hashtable [this.item] = this;});所以現在我可以說: HashTable [OBJECT_I_WANT] .VALUE_I_WANT_TO_SET ='N'; – colemande 2010-08-20 19:38:59