如何正确使用lodash pick方法

How to correctly use lodash pick method

我正在尝试使用下划线来过滤掉对象的某些属性。以下代码的开头按预期工作,但 .pick 不工作。我的目标是将返回对象的属性限制为 .pick 方法中列出的那些字符串。

var result = _.chain(data)
  .each(function(item) {
    item.answers = [];
    _.each(data, function(object) {
      if (item.id === object.id) {
        item.answers.push({
          id: object.answer_id,
          email: object.answer_email,
          date: object.answer_date
        });
      }
    });
    item = _.pick(item,
      'id',
      'owner_id',
      'url',
      'enabled',
      'review_date',
      'answers'
    );
  })
  .uniq(function(item) {
    return item.id;
  })
  .value();

我从 'data' 开始的数组如下所示:

[
  {
    id: '8ffdf27b-5a90-478a-b263-dhhdhdhhdhd',
    answer_date: Fri Oct 30 2015 14:35:07 GMT-0400 (EDT),
    answer_id: 1,
    answer_email: 'test@example.com',
    owner_id: 5,
    url: 'media/5-4a3640ac-ec13-fhhfh-ac0a-fhjhdhhdhd.jpg',
    enabled: false,
    review_date: Sun Nov 01 2015 13:57:32 GMT-0500 (EST)
  }, ...
]

返回的数组 'should' 如下所示:

[
  {
    id: '8ffdf27b-5a90-478a-b263-dhhdhdhhdhd',
    owner_id: 5,
    url: 'media/5-4a3640ac-ec13-fhhfh-ac0a-fhjhdhhdhd.jpg',
    enabled: false,
    review_date: Sun Nov 01 2015 13:57:32 GMT-0500 (EST),
    answers: [{...}, {...}]
  }, ...
]

但目前看起来像这样:

[
  {
    id: '8ffdf27b-5a90-478a-b263-dhhdhdhhdhd',
    answer_date: Fri Oct 30 2015 14:35:07 GMT-0400 (EDT),
    answer_id: 1,
    answer_email: 'test@example.com',
    owner_id: 5,
    url: 'media/5-4a3640ac-ec13-fhhfh-ac0a-fhjhdhhdhd.jpg',
    enabled: false,
    review_date: Sun Nov 01 2015 13:57:32 GMT-0500 (EST),
    answers: [{...}, {...}]
  }, ...
]

您应该使用 map() 而不是 each() 来更改您的数组(请注意,您必须 return 映射函数中的修改项):

var result = _.chain(data)
.map(function (item) {
  item.answers = [];
  _.each(data, function (object) {
    if (item.id === object.id) {
      item.answers.push({
        id: object.answer_id,
        email: object.answer_email,
        date: object.answer_date
      });
    }
  });
  item = _.pick(item,
    'id',
    'owner_id',
    'url',
    'enabled',
    'review_date',
    'answers'
  );
  return item;
})
.uniq(function (item) {
  return item.id;
})
.value();