求助,如何在 json 中检索数据?

2017 年 2 月 27 日
 yangwenqian
var data = [{
 id: 1,
 value: 2532,
 son: [{
  id: 5,
  value: 543,
  son: [{
   id: 46,
   value: 999879,
   son: [{
    id: 12,
    value: 903,
    son: []
   }]
  }]
 }]
}, {
 id: 3,
 value: 4684,
 son: [{
  id: 11,
  value: 65,
  son: []
 }, {
  id: 45,
  value: 523423,
  son: []
 }]
}]

一个无穷节点的 json,深度有几十级,超大,我要查询 id 为 46 的 value 是多少,求一个 js 函数,谢谢。
4578 次点击
所在节点    JavaScript
8 条回复
Cbdy
2017 年 2 月 28 日
做成一个 b 树?
czheo
2017 年 2 月 28 日
function search(id, data) {
data.forEach( d => {
if (d.id == id) {
console.log(d.value)
}
search(id, d.son)
})
}

search(46, data)
vcfvct
2017 年 2 月 28 日
放到 NoSQL 里面,随便 query 。 MongoDB , elastic search 什么什么的,都可以
XiaoFaye
2017 年 2 月 28 日
整个 JSON 就是一个字符串,你直接 indexOf 不行吗?别把简单问题复杂化呀。
zael
2017 年 2 月 28 日
lodash?
spark
2017 年 2 月 28 日
递归
lhstock
2017 年 2 月 28 日
function a(data, id) {
var value;

function forEachs(arr) {

arr.forEach(function(d) {
find(d, id);
d.son != 0 && forEachs(d.son) // : find(d.sum);

})

}

function find(d, id) {
if(d.id == id) {
value = d.value
}
}

forEachs(data);
return value
}

console.log(a(data, 46));
genesischou
2017 年 3 月 3 日
function search(array, id, temp) {
let data = array.concat(),
result = temp || {};
data.forEach(item => {
if (item.id === id) {
result = item;
return;
} else if (Object.prototype.toString.call(item.son) === '[object Array]' &&
item.son.length) {
result=search(item.son, id, result);
}
})
return result;
}
search(data, 46);//{ id: 46, value: 999879,son: [ { id: 12, value: 903, son: [] } ] }

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/343677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX