2010-08-17 65 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