我的嵌套json看起来像(深度没有定义。它可以是任何):
[{
"id":"1",
"label":"abc",
"children":[{
"id":"2",
"label":"xyz",
"children":[{
"id":"3",
"label":"lmn",
"children":[{...}]
}]
},
.
.
.
{
"id":"4",
"label":"ghi",
"children":[{
"id":"5",
"label":"aws",
"children":[{
"id":"6",
"label":"pqr",
"children":[{...}]
}]
}]
}]
假设我现在有'id'。我想得到那个元素的'标签'。使用下划线我该怎么做呢。我尝试使用_find
,但它返回了undefined
。后来我发现它返回了第一级的结果。
答案 0 :(得分:1)
简单的单行:
var label = _(json).find(function(item) { return item.id === "1"; }).label;
或者,如果您打算在功能上重复使用:
function getItemById(id) {
return _(json).find(function(item) { return item.id === id; });
}
// ...
var label = getItemById('1').label;
已编辑 - 我错过了原始问题中的详细信息。
试试这个:
function getItemById(array, id) {
for (var i=0; i < array.length; i++) {
var item = array[i];
if (item.id === id) {
return item;
} else if (item.children.length) {
var child = getItemById(item.children, id);
if (child) {
return child;
}
}
}
}
// ...
var label = getItemById(json, '1').label;