如何从JSON中选择不同的值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我有我的JSON如下

{"DATA": [{"id":11,"name":"ajax","subject":"OR","mark":63},
{"id":12,"name":"javascript","subject":"OR","mark":63},
{"id":13,"name":"jquery","subject":"OR","mark":63},
{"id":14,"name":"ajax","subject":"OR","mark":63},
{"id":15,"name":"jquery","subject":"OR","mark":63},
{"id":16,"name":"ajax","subject":"OR","mark":63},
{"id":20,"name":"ajax","subject":"OR","mark":63}],"COUNT":"120"}

有没有什么好的方法distinct name从这个JSON中找出来的

结果 javascript,jquery,ajax

我可以用下面的方法来做到这一点

var arr=[''];
var j=0;
for (var i = 0; i < varjson.DATA.length; i++) {
  if($.inArray(varjson.DATA[i]["name"],arr)<0){
      arr[j]=varjson.DATA[i]["name"];
      j++;
  }
}

有没有better method给我更好的表现?

提问于
用户回答回答于

如果你想保存一些循环,我会使用一个对象和一个数组:

var lookup = {};
var items = json.DATA;
var result = [];

for (var item, i = 0; item = items[i++];) {
  var name = item.name;

  if (!(name in lookup)) {
    lookup[name] = 1;
    result.push(name);
  }
}

通过这种方式,你基本上避免了indexOf/ inArray调用,并且你将得到一个迭代比迭代对象属性更快的数组 - 也因为在第二种情况下,你需要检查hasOwnProperty

当然,如果你只用一个Object就可以了,那么你可以避免使用这个检查,并且可以避免result.push使用这个数组Object.keys(lookup),但是不会比这个更快。

用户回答回答于

使用Jquery方法。

var UniqueNames= $.unique(data.DATA.map(function (d) {return d.name;}));

alert($.unique(names));

jsfiddle

扫码关注云+社区