我如何从一个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