lodash从数组中选择对象字段

use*_*173 16 javascript lodash

我有一些对象:

var results= [
    {         
      "_type": "MyType",
      "_id": "57623535a44b8f1417740a13",         
      "_source": {
        "info": {
          "year": 2010,
          "number": "string",             
        },
        "type": "stolen",           
        "date": "2016-06-16T00:00:00",
        "createdBy": "57469f3c71c8bf2479d225a6"            
      }
    }
  ];
Run Code Online (Sandbox Code Playgroud)

我需要从数组中选择特定字段.结果,我想得到以下内容:

[
    {
        "_id": "57623535a44b8f1417740a13",
        "info": {
            "year": 2010,
            "number": "string"
        },
        "type": "stolen",            
        "date": "2016-06-16T00:00:00",
        "createdBy": "57469f3c71c8bf2479d225a6"
    }
]
Run Code Online (Sandbox Code Playgroud)

如您所见,我想选择对象的_id字段和内容_source.我怎么能用lodash做到这一点?

我找到了.map函数,但它不需要一组键: var res = _.map(results, "_source");

rad*_*dyz 40

你可以这样做:

var mapped = _.map(results, _.partialRight(_.pick, ['_id', 'info', 'type', 'date', 'createdBy']));
Run Code Online (Sandbox Code Playgroud)

一点解释:

  1. _.map():期望一个函数,它从集合中获取每个项目,以便您可以将其映射到其他项目.
  2. _.partialRight():采用一个函数,稍后将调用它的参数附加到结尾
  3. _.pick():获取从对象指定的路径.

  • 我发现partial很难阅读,所以我想建议只使用箭头函数:`varmapped = _.map(results, obj => _.pick(obj, ['_id', 'info', 'type') , '日期', '创建者']));` (2认同)

Nin*_*olz 5

在纯 Javascript 中,您可以迭代Array#map并为每个对象组装一个新对象,而不会破坏原始对象。

var results = [{ "_type": "MyType", "_id": "57623535a44b8f1417740a13", "_source": { "info": { "year": 2010, "number": "string", }, "type": "stolen", "date": "2016-06-16T00:00:00", "createdBy": "57469f3c71c8bf2479d225a6" } }],
    res = results.map(function (a) {
        var o = { _id: a._id };
        ["info", "type", "date", "createdBy"].forEach(function (k) {
            o[k] = a._source[k];
        });
        return o;
    });

console.log(res);
Run Code Online (Sandbox Code Playgroud)