javascript - 如何根据一个值过滤和修改数组?
问题描述
我有一个数组:
[
{name: "test", value: "test", group: 0},
{name: "test1", value: "test2", group: 0},
{name: "test3", value: "test3", group: 1},
{name: "test4", value: "test4", group: 1},
{name: "test5", value: "test5", group: 1},
{name: "test6", value: "tes6t", group: 2},
{name: "test7", value: "test7", group: 2},
]
我需要这个数组看起来像这样:
[
{name: "test", value: "test", group: 0, selections: [
{name: "test", value: "test", group: 0},
{name: "test1", value: "test1", group: 0}
]},
{name: "test3", value: "test3", group: 1, selections: [
{name: "test3", value: "test3", group: 1},
{name: "test4", value: "test4", group: 1},
{name: "test5", value: "test5", group: 1}
]},
{name: "test6", value: "tes6t", group: 2, selections: [
{name: "test6", value: "tes6t", group: 2},
{name: "test7", value: "test7", group: 2}
]},
]
根据组值过滤相同的项目,然后将所有相同的项目添加到第一个元素选择数组中,包括第一个。
如何在 JavaScript/TypeScript 中没有多个 for 数组的情况下以最佳方式实现它?
解决方案
这可以使用Array.prototype.reduce
.
const input = [
{name: "test", value: "test", group: 0},
{name: "test1", value: "test2", group: 0},
{name: "test3", value: "test3", group: 1},
{name: "test4", value: "test4", group: 1},
{name: "test5", value: "test5", group: 1},
{name: "test6", value: "tes6t", group: 2},
{name: "test7", value: "test7", group: 2},
];
const groupBy = input.reduce((acc, cur) => {
acc[cur.group] ? acc[cur.group].selections.push(cur) : acc[cur.group] = {
...cur,
selections: [ cur ]
};
return acc;
}, {});
const output = Object.values(groupBy);
console.log(output);
推荐阅读
- python-3.x - KeyError:尝试在字典中查找最小值时出现 411
- django - 在 Gitlab 上为 django 项目设置 CI/CD
- debugging - 一旦检查了一个值,Rstudio 调试器就会退出调试模式
- javascript - 应该显示错误消息的函数不显示它
- python-3.x - Python递归函数计数用户
- angular - 如果在搜索栏中未找到结果,则显示错误消息
- javascript - 无法从 SVG 图像元素加载图像
- java - 如何在 spring-boot 中管理 gRPC 服务器通道
- python - 在鱼眼相机中使用 python 进行人脸识别
- java - java.lang.IllegalStateException:不是标准目录之一:Android 10 上的 /storage/emulated/0/Download/