下划线js找到嵌套的json

时间:2015-04-08 14:25:01

标签: javascript jquery json nested underscore.js

我的嵌套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。后来我发现它返回了第一级的结果。

1 个答案:

答案 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;