首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从JSON中选择不同的值

从JSON中选择不同的值
EN

Stack Overflow用户
提问于 2013-07-22 13:28:52
回答 7查看 130.6K关注 0票数 36

我的JSON如下所示

代码语言:javascript
复制
{"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"}

有没有什么好的方法可以从这个JSON中找到distinct name

结果javascript,jquery,ajax

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

代码语言:javascript
复制
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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-07-22 14:18:18

如果你想节省一些周期,我会使用一个对象和一个数组:

代码语言:javascript
复制
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

当然,如果你只需要一个对象,你就完全可以避免检查和result.push,如果使用Object.keys(lookup)来获取数组,但它不会比这更快。

票数 68
EN

Stack Overflow用户

发布于 2014-03-16 08:34:17

对于这类事情,Underscore.js非常好用。您可以使用_.countBy()来获取每个name的计数

代码语言:javascript
复制
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}]

_.countBy(data, function(data) { return data.name; });

提供:

代码语言:javascript
复制
{ajax: 4, javascript: 1, jquery: 2} 

对于键的数组,只需使用_.keys()

代码语言:javascript
复制
_.keys(_.countBy(data, function(data) { return data.name; }));

提供:

代码语言:javascript
复制
["ajax", "javascript", "jquery"]
票数 21
EN

Stack Overflow用户

发布于 2013-07-22 14:27:13

使用唯一的Jquery方法。

代码语言:javascript
复制
var UniqueNames= $.unique(data.DATA.map(function (d) {return d.name;}));

alert($.unique(names));

JSFiddle

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17780508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档