javascript - 从 JSON 中选择不同的值

我的 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"}

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

结果 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++;
  }
}

有没有什么更好的方法可以给我带来更好的性能?

最佳答案

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

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) 获取数组,但不会比这更快。

https://stackoverflow.com/questions/17780508/

相关文章:

ruby-on-rails - JBuilder中未定义的局部变量或方法 `json'

json - SQL Server OPENJSON 读取嵌套的 json

ajax - 何时将 Ajax 与 Json 用于 Javascript 事件?

json - 调用 Web API 2 端点时出现 HTTP 415 不支持的媒体类型错误

python - 将 JSON 文件读入 Spark 时出现 _corrupt_record 错误

java - 如何测试 JSONObject 是否为空或不存在

javascript - 如何从对象中删除所有 null 和空字符串值?

json - 使用 jq 就地修改 json 中的键值

python - IPython Notebook 中漂亮的 JSON 格式

javascript - 将 JSON 对象推送到 localStorage 中的数组