我的 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 和空字符串值?