Lodash _.filter如何在数组

时间:2017-04-18 20:10:55

标签: javascript arrays lodash

我没有运气识别数组内部和数组中定义的对象。

我有以下数据

var values = 
[
  {
  "letter": "S",
  "clients": [
    {
      "_id": "58f61681e32f1927a41c19bf",
      "firstName": "Shelly",
      "lastName": "R",
    }
  ]
  },
  {
  "letter": "G",
  "clients": [
      {
        "_id": "58f2ab99319e35299b1ee4a9",
        "firstName": "Gary",
        "lastName": "R",
      }
    ]
  }
]

以及以下的lodash电话。

var identifier = '58f2ab99319e35299b1ee4a9';
var v =  _.filter(values, {clients: [{_id: identifier}]});
我读过的

应该适用于嵌套数组。 我在这里错过了什么吗?

我在角度组件路由方案中使用此_.filter。

尽管values.clients对象包含更多信息。我用实际输出代替了它,它起作用了。返回了一个实例。但是下面的代码没有。

}).state('clients.client', {
        url: '/{clientId}',
        component: 'client',
            resolve: {
                    client : function(rolodex, $stateParams, _){
                        //var values = rolodex;
                        //console.log(JSON.stringify(values));
                        var identifier = $stateParams.clientId;

                        var v =  _.filter(rolodex, {clients: [{_id: identifier}]});
                        console.log(v[0].clients[0]);
                        return v[0].clients[0];
                    }
            }
    });

-G。

我想我很快就说了,这个lodash脚本无法正常工作。 如果我的辅助数组包含多个条目,我会在结果集中获得两个条目。

[
  {
    "letter": "C",
    "clients": [
      {
        "_id": "58f6b8a932edbb7dd718f05a",
        "firstName": "Casie",
        "lastName": "L"
      },
      {
        "_id": "58f68b0d527cc336a8f86cc8",
        "firstName": "Chad",
        "lastName": "M"
      }
    ]
  },
  {
    "letter": "G",
    "clients": [
      {
        "_id": "58f2ab99319e35299b1ee4a9",
        "firstName": "Gary",
        "lastName": "R"
      }
    ]
  },
  {
    "letter": "J",
    "clients": [
      {
        "_id": "58f6b90032edbb7dd718f05c",
        "firstName": "Jett",
        "lastName": "F"
      }
    ]
  },
  {
    "letter": "S",
    "clients": [
      {
        "_id": "58f61681e32f1927a41c19bf",
        "firstName": "Shelly",
        "lastName": "R"
      },
      {
        "_id": "58f6b8d632edbb7dd718f05b",
        "firstName": "Shirley",
        "lastName": "A"
      }
    ]
  }
]

给了我正确的包含正确_id的数组。

[
    {
        "letter": "S",
        "clients": [
            {
                "_id": "58f61681e32f1927a41c19bf",
                "firstName": "Shelly",
                "lastName": "R"
            },
            {
                "_id": "58f6b8d632edbb7dd718f05b",
                "firstName": "Shirley",
                "lastName": "A"
            }
        ]
    }
]

但我希望我的结果看起来像这样。

{
    "_id": "58f61681e32f1927a41c19bf",
    "firstName": "Shelly",
    "lastName": "R"
}

这可能是我的答案。

var b = _(data).thru(function(col1){
return _.union(col1, _.map(col1, 'clients'));
})
.flatten()
.find({_id : '58f61681e32f1927a41c19bf'});

1 个答案:

答案 0 :(得分:0)

这种方法似乎适用于平均时间。

var b = _(data).thru(function(col1){
return _.union(col1, _.map(col1, 'clients'));
})
.flatten()
.find({_id : '58f61681e32f1927a41c19bf'});