我想迭代一个数组,运行一个计算,如果条件为结果为真,则返回一个新对象. _.filter(...)在这里不起作用,因为迭代器函数必须返回true或者false.
_.map(people, function(person) {
var age = calculateAge(person.birthDate);
if (age > 50) {
return {person: person, age: age};
}
});
Run Code Online (Sandbox Code Playgroud)
我已经尝试过全面搜索,包括文档,但我还没有找到一种方法来做到这一点.
7za*_*rk7 10
听起来像是你想要reduce而不是map:
var newArray = _.reduce(people, function(results, person) {
var age = calculateAge(person.birthDate);
if (age > 50) {
results.push({ person: person, age: age });
}
return results;
}, []);
Run Code Online (Sandbox Code Playgroud)
此外,如果你是ES6 +和/或使用Babel,这可能是列表推导的一个很好的用途:
let newArray = [for (person of people)
if (calculateAge(person.birthDate) > 50)
{ person: person, age: calculateAge(person.birthDate) }
];
Run Code Online (Sandbox Code Playgroud)
更新:已从Babel 6中删除列表推导.ES2015版本如下所示:
const newArray = people.reduce((results, person) => {
const age = calculateAge(person.birthDate);
return (age > 50) ? [...results, { person, age }] : results;
}, []);
Run Code Online (Sandbox Code Playgroud)
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)