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

2017-02-27 23:51:21 +08:00
 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 函数,谢谢。
3784 次点击
所在节点    JavaScript
8 条回复
Cbdy
2017-02-28 00:56:53 +08:00
做成一个 b 树?
czheo
2017-02-28 03:33:50 +08:00
function search(id, data) {
data.forEach( d => {
if (d.id == id) {
console.log(d.value)
}
search(id, d.son)
})
}

search(46, data)
vcfvct
2017-02-28 04:26:20 +08:00
放到 NoSQL 里面,随便 query 。 MongoDB , elastic search 什么什么的,都可以
XiaoFaye
2017-02-28 04:36:16 +08:00
整个 JSON 就是一个字符串,你直接 indexOf 不行吗?别把简单问题复杂化呀。
tomoya92
2017-02-28 07:45:04 +08:00
lodash?
spark
2017-02-28 09:52:50 +08:00
递归
lhstock
2017-02-28 10:07:10 +08:00
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-03-03 18:15:06 +08:00
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://www.v2ex.com/t/343677

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

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

© 2021 V2EX