javascript - 根据对象不同的值过滤数组
问题描述
我想简化一组对象过滤。假设我有以下数组,
const users = [{
name: "user1",
gender: "m"
}, {
name: "user2",
gender: "f"
}, {
name: "user3",
gender: "f"
}, {
name: "user4",
gender: "m"
}, {
name: "user5",
gender: "m"
}];
例如,我需要按男性或女性过滤所有用户,所以我通过过滤器对象属性循环:
const fUsers = users.filter(user => user.gender === "f");
const mUsers = users.filter(user => user.gender === "m");
const results = [fUsers, mUsers];
console.log(results);
有没有更好的过滤方法一次完成,所以我可以在多个数组中得到结果。
解决方案
您可以使用 reduce 函数并在累加器中传递一个嵌套数组。在回调中检查性别,您可以使用acc[0]
在累加器的第一个嵌套数组中添加元素或acc[1]
const users = [{
name: "user1",
gender: "m"
}, {
name: "user2",
gender: "f"
}, {
name: "user3",
gender: "f"
}, {
name: "user4",
gender: "m"
}, {
name: "user5",
gender: "m"
}];
const newArr = users.reduce((acc, curr) => {
if (curr.gender === 'f') {
acc[0].push(curr)
} else {
acc[1].push(curr)
}
return acc;
}, [
[],
[]
]);
console.log(newArr)
或者,您也可以使用普通的 for 循环
const users = [{
name: "user1",
gender: "m"
}, {
name: "user2",
gender: "f"
}, {
name: "user3",
gender: "f"
}, {
name: "user4",
gender: "m"
}, {
name: "user5",
gender: "m"
}];
let arr = [
[],
[]
];
for (let i = 0; i < users.length; i++) {
users[i].gender === 'f' ? arr[0].push(users[i]) : arr[1].push(users[i])
};
console.log(arr)
推荐阅读
- php - Laravel 7 数据库种子命令不成功
- python - 如何使用输入函数在 NumPy 中附加一个数组?
- laravel - 调用未定义的方法 MessageBag::getBag()
- python - Python为每组图像保留N张图像
- apache-spark - 与管道 PySpark 匹配时,输出列已存在错误
- mysql - mysql:从表中选择数据并按时隙分组
- arrays - 如何在谷歌表格中组合嵌套数组公式?
- git - Git 合并开发分支到特性分支
- jquery - 如何更改 url 以保持当前 HTML
- typescript - 是否有一种类型安全的方法可以将较大的对象减少()为打字稿中的新类型?