如何从JavaScript对象获取项目?

时间:2010-08-17 22:39:11

标签: javascript jquery json

如何从JavaScript对象中获取项目:

var items = [
  {
    ITEM:1,
    AMOUNT:10
  },
  {
    ITEM:2,
    AMOUNT:20
  }
];

我希望能够做到这样的事情:

$(items).filter(ITEM == 1).AMOUNT;

...将返回10

2 个答案:

答案 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;
  }