Underscore.js在嵌套数组中查找并返回元素

时间:2014-07-15 11:15:55

标签: javascript underscore.js

我有这样的数据结构:

[
    {
        "name": "AAAA",
        "children": [
            {"name": "vvv", "id": 3},
            {"name": "vvv22", "id": 4}
        ]
    },
    {
        "name": "BBBB",
        "children": [
            {"name": "ggg", "id": 5},
            {"name": "ggggv22", "id": 6}
        ]
    },
]

我想找到并返回给定身份证的孩子。如何使用Underscore.js实现这一目标?

我目前的实现没有使用下划线:

for (var i = 0; i < data.length; i++) {
     var dataItem= data[i];
     for (var j = 0; j < dataItem.children.length; j++) {
        var child = dataItem.children[j];
        if (child .id == id) {
             return child;  
        }
     }
} 

2 个答案:

答案 0 :(得分:18)

  1. Pluck来自顶级对象的children个键
  2. Flatten生成的数组
  3. 符合条件的
  4. Find the first object,例如具有正确的ID
  5. Chain这些操作
  6. 导致

    var res = _(data).chain().
        pluck('children').
        flatten().
        findWhere({id: 3}).
        value();
    

    演示Go to Fiddle Button

答案 1 :(得分:3)

我使用下划线来完成此功能,这将完成您的工作。

var getChild = function(id,data){
    var allChildren = _.flatten(_.pluck(data,'children'));
    var childWithId = _.find(allChildren,function(child){return child.id == id});
    return childWithId;
}

var child = getChild(5,data);
console.log(child);