繁体   English   中英

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

[英]access javascript array element by JSON object key

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

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"];

在当前形式中,您无法通过元素的邮政编码访问没有循环的元素。

您可以将数组转换为这种形式的对象:

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

您的代码中有几个错误。

  1. 您的数组是对象的集合
  2. 您可以使用其属性名称而不是属性值(即Zips[0]['Zip']是正确的)或通过对象符号Zips[0].Zip对象。

如果要查找值,则必须循环

如果要保留数组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示例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM