我有类似
的东西const payload = [{'name':'john doe', 'company': 'abc', 'age': 35},
{'name':'jane doe', 'company': 'def', 'age': 36}]
_.map(users, "name") => ['john doe', 'jane doe']
_.map(users, "company") => ['abc', 'def']
我希望有一个电话从有效负载中检索名称,公司和年龄。我不想用map
函数进行3次调用。我怎样才能做到这一点?因为我的有效载荷很大,有很多属性。
谢谢!
答案 0 :(得分:0)
您可以使用lodash#pick
封装在lodash#partial
内作为lodash#map
的迭代者。
const result = _.map(payload, _.partial(_.pick, _, ['name', 'company']));
const payload = [{
'name': 'john doe',
'company': 'abc',
'age': 35
},
{
'name': 'jane doe',
'company': 'def',
'age': 36
}
];
const result = _.map(payload, _.partial(_.pick, _, ['name', 'company']));
console.log(result);

body > div { min-height: 100%; top: 0; }

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
答案 1 :(得分:0)
使用lodash,您可以将对象映射到它们的值,并解压缩结果:
const payload = [{'name':'john doe', 'company': 'abc', 'age': 35}, {'name':'jane doe', 'company': 'def', 'age': 36}];
const result = _(payload)
.map(_.values) // map to value arrays
.unzip() // unzip the arrays
.value();
console.log(result);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
同样的想法在没有lodash的情况下通过将对象映射到值数组,然后使用reduce转置值来实现:
const payload = [{'name':'john doe', 'company': 'abc', 'age': 35}, {'name':'jane doe', 'company': 'def', 'age': 36}];
const result = payload
.map(Object.values) // map to value arrays
.reduce((t, arr) => { // transpose the arrays
arr.forEach((v, i) => (t[i] || (t[i] = [])).push(v));
return t;
}, []);
console.log(result);
&#13;