从Map方法中有条件返回对象
Lodash - Conditionally Return Object from a Map Method
我想遍历一个数组,运行一个计算,如果结果的条件为真,则返回一个新对象。_.filter(...)
不能在这里工作,因为迭代器函数必须返回true
或false
。
_.map(people, function(person) {
var age = calculateAge(person.birthDate);
if (age > 50) {
return {person: person, age: age};
}
});
我试着到处搜索,包括文档,但我还没有找到一种方法来做这件事。
听起来你可能想要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;
}, []);
<年代>此外,如果你是ES6+和/或使用Babel,这可能是列表推导的一个很好的用途:年代>
let newArray = [for (person of people)
if (calculateAge(person.birthDate) > 50)
{ person: person, age: calculateAge(person.birthDate) }
];
更新:列表推导式已经从Babel 6中删除。ES2015版本如下:
const newArray = people.reduce((results, person) => {
const age = calculateAge(person.birthDate);
return (age > 50) ? [...results, { person, age }] : results;
}, []);
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)
这可以为您工作:
var sorted = _.filter(people, function(person) {
var age = calculateAge(person.birthDate);
if (age > 50) {
return true;
}
});
var newArray = _.map(sorted, function(person) {
var age = calculateAge(person.birthDate);
return {person: person, age: age};
});
这将首先筛选列表,然后返回一个包含年龄在50岁以上的人的对象的新数组。
试试这个:
people = _.pluck(
_.filter(
_.map(people, function(person) {
return { person: person, age: calculateAge(person.birthDate) };
}),
function(person) {
return person.age > 50;
}
),
"person"
);
参见working fiddle
相关文章:
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 通过数组值返回对象
- JavaScript:返回对象的函数
- 为什么document.getElementsByClassName(“className”)返回对象
- 如何返回对象
- Promise没有;t返回对象的数组
- 面料:“;鼠标:向下”;在event.target中未返回对象
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- Javascript:返回对象
- 为什么 javascript 返回对象位置 true 或 false
- 解析查询查找方法返回对象而不是数组
- 来自函数的返回对象在 jQuery 中未从 $.post 定义
- JavaScript 返回对象未按预期工作
- 返回“[对象对象] NaN” - Javascript
- 何时从创建返回对象
- Javascript:接收对象并返回对象中描述的所有数字的列表的函数
- JSDoc:返回对象结构
- node.js请求返回对象
- 返回对象的ECMAScript 6箭头函数
- 如何从控制器返回对象列表并使用JQuery(SpringMVC,ajax)显示它们