通过JSON对象键访问javascript数组元素

时间:2013-08-29 15:45:48

标签: javascript arrays json

我有一个看起来像这样的数组

var Zips = [{Zip: 92880, Count:1}, {Zip:91710, Count:3}, {Zip:92672, Count:0}]

我希望能够通过Zip属性访问特定对象的Count属性,这样当我得到另一个匹配的zip时,我可以增加计数。我希望这样的东西,但它不太正确(这将是一个循环)

Zips[rows[i].Zipcode].Count

我知道这不对,我希望每次都能在没有循环结果集的情况下找到解决方案吗?

由于

6 个答案:

答案 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)

您的代码中出现了一些错误。

  1. 您的数组是对象集合
  2. 您可以使用其属性名称访问对象,而不是属性值,即Zips[0]['Zip']是正确的,或者使用对象表示法Zips[0].Zip
  3. 如果要查找必须循环的值

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

jsFiddle example

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