我有一个列表我试图从使用_.get拉取一个对象,但是在选择之后我需要遍历该对象以创建一个新属性。到目前为止,我已成功使用_.get和_.map的组合,如下所示,但我希望我能以某种方式使用_.chain。
var selected = _.get(results, selectedId);
return _.map([selected], result => {
var reviews = result.reviews.map(review => {
var reviewed = review.userId === authenticatedUserId;
return _.extend({}, review, {reviewed: reviewed});
});
return _.extend({}, result, {reviews: reviews});
})[0];
是否可以使用map以外的其他方式进行这样的转换(因为map需要我打破它/创建一个包含solo项目的数组)。提前谢谢!
答案 0 :(得分:3)
我可以看到您正在创建不必要的map()来电,您可以将所有这些工作简化为以下内容:
var output = {
reviews: _.map(results[selectedId], function(review) {
return _.defaults({
reviewed: review.userId === authenticatedUserId
}, review);
})
};
defaults()方法类似于extend(),除非设置了属性,否则会忽略相同属性的其他值。
var selectedId = 1;
var authenticatedUserId = 1;
var results = {
1: [
{ userId: 1, text: 'hello' },
{ userId: 2, text: 'hey' },
{ userId: 1, text: 'world?' },
{ userId: 2, text: 'nah' },
]
};
var output = {
reviews: _.map(results[selectedId], function(review) {
return _.defaults({
reviewed: review.userId === authenticatedUserId
}, review);
})
};
document.body.innerHTML = '<pre>' + JSON.stringify(output, 0, 4) + '</pre>';
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>