我有一个看起来像这样的数组
var Zips = [{Zip: 92880, Count:1}, {Zip:91710, Count:3}, {Zip:92672, Count:0}]
我希望能够通过 Zip 属性访问特定对象的 Count 属性,以便在获得另一个匹配的 zip 时增加计数。我希望这样的事情,但它不太正确(这将是一个循环)
Zips[rows[i].Zipcode].Count
我知道这是不对的,我希望有一个解决方案,而不是每次都循环遍历结果集?
谢谢
我有一个看起来像这样的数组
var Zips = [{Zip: 92880, Count:1}, {Zip:91710, Count:3}, {Zip:92672, Count:0}]
我希望能够通过 Zip 属性访问特定对象的 Count 属性,以便在获得另一个匹配的 zip 时增加计数。我希望这样的事情,但它不太正确(这将是一个循环)
Zips[rows[i].Zipcode].Count
我知道这是不对的,我希望有一个解决方案,而不是每次都循环遍历结果集?
谢谢
我知道这是不对的,我希望有一个解决方案,而不是每次都循环遍历结果集?
不,您将不得不循环并找到符合您标准的适当值。或者,您可以使用以下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"];
如果要保留数组 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);
在当前形式中,您无法通过其邮政编码访问一个元素而无需循环。
您可以将数组转换为这种形式的对象:
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;
}
您的代码中有几个错误。
Zips[0]['Zip']
正确)或对象表示法访问对象Zips[0].Zip
。如果你想找到你必须循环的值
function getZip(zips, zipNumber) {
var answer = null;
zips.forEach(function(zip){
if (zip.Zip === zipNumber) answer = zip;
});
return answer;
}
此函数返回 Zip 属性等于 zipNumber 的 zip 对象,如果不存在则返回 null。
你试过这个吗?
Zips[i].Zip.Count