我有一个看起来像这样的数组
var Zips = [{Zip: 92880, Count:1}, {Zip:91710, Count:3}, {Zip:92672, Count:0}]
我希望能够通过Zip属性访问特定对象的Count属性,这样当我得到另一个匹配的zip时,我可以增加计数。我希望这样的东西,但它不太正确(这将是一个循环)
Zips[rows[i].Zipcode].Count
我知道这不对,我希望每次都能在没有循环结果集的情况下找到解决方案吗?
由于
答案 0 :(得分:5)
我知道这是不对的,我希望没有解决方案 每次循环结果集?
不,你必须循环并找到符合你标准的适当值。或者,您可以使用filter
方法:
var filteredZips = Zips.filter(function(element) {
return element.Zip == 92880;
});
if (filteredZips.length > 0) {
// we have found a corresponding element
var count = filteredZips[0].count;
}
如果您以不同的方式设计了对象:
var zips = {"92880": 1, "91710": 3, "92672": 0 };
然后你可以直接访问Count
:
var count = zips["92880"];
答案 1 :(得分:1)
在当前表单中,您无法通过其ZIP代码访问元素而无需循环。
您可以将数组转换为此形式的对象:
var Zips = { 92880: 1, 91710: 3 }; // etc.
然后你可以通过
访问它Zips[rows[i].Zipcode]
要从数组转换为对象,您可以使用此
var ZipsObj = {};
for( var i=Zips.length; i--; ) {
ZipsObj[ Zips[i].Zip ] = Zips[i].Count;
}
答案 2 :(得分:1)
您的代码中出现了一些错误。
Zips[0]['Zip']
是正确的,或者使用对象表示法Zips[0].Zip
。如果要查找必须循环的值
答案 3 :(得分:1)
如果你想保持数组Zips及其元素的格式
var Zips = [{Zip: 92880, Count:1}, {Zip:91710, Count:3}, {Zip:92672, Count:0}];
var MappedZips = {}; // first of all build hash by Zip
for (var i = 0; i < Zips.length; i++) {
MappedZips[Zips[i].Zip] = Zips[i];
}
MappedZips为{"92880": {Zip: 92880, Count:1}, "91710": {Zip:91710, Count:3}, "92672": {Zip:92672, Count:0}}
// then you can get Count by O(1)
alert(MappedZips[92880].Count);
// or can change data by O(1)
MappedZips[92880].Count++;
alert(MappedZips[92880].Count);
答案 4 :(得分:0)
function getZip(zips, zipNumber) {
var answer = null;
zips.forEach(function(zip){
if (zip.Zip === zipNumber) answer = zip;
});
return answer;
}
此函数返回zip对象,其Zip属性等于zipNumber,如果不存在,则返回null。
答案 5 :(得分:-1)
Zips[i].Zip.Count