Как правильно использовать метод lodash pick
Я пытаюсь использовать подчеркивание, чтобы отфильтровать определенные свойства объекта. Начало следующего кода работает как положено, но .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)
}, ...
]
Возвращенный массив должен выглядеть так:
[
{
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: [{...}, {...}]
}, ...
]
1 ответ
Решение
Вы должны использовать map()
вместо each()
чтобы изменить ваш массив (обратите внимание, что вы должны вернуть измененный элемент в функцию карты):
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();