如何从JavaScript对象中获取项目:
var items = [
{
ITEM:1,
AMOUNT:10
},
{
ITEM:2,
AMOUNT:20
}
];
我希望能够做到这样的事情:
$(items).filter(ITEM == 1).AMOUNT;
...将返回10
。
答案 0 :(得分:6)
您正在创建一个对象数组。如果按顺序插入项目,您可以使用:
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)(常量时间)中找到。
答案 1 :(得分: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;
}