javascript - 如何在 JavaScript 中将两个依赖数组减少为一个对象?
问题描述
作为 SQL 查询的结果,我有两个 JavaScript 字符串数组(每个数组是结果中的一列),其中可能包含重复项,例如:
arrOne = ["key_1", "key_1", "key_2", "key_3", "key_1", "key_1"]
arrTwo = ["val_1", "val_1", "val_3", "val_3", "val_2", "val_3"]
我需要将它们简化为一个对象,例如:
newObj = {
key_1: ["val_1", "val_2", "val_3"],
key_2: ["val_3"],
key_3: ["val_3"]
}
所以基本上,对于每个键值对,值应该是来自 arrTwo 的唯一值的简化列表。
我努力了:
let newObj = arrOne.reduce((o, k, i) => ({...o, [k]: arrTwo[i]}), {})
这给了我:
{ key_1: 'val_3', key_2: 'val_3', key_3: 'val_3' }
但我需要 arrTwo[i] 部分来减少值列表,而不是每个键的最后一个值。
这可能有一个优雅的单行解决方案,但我是 JavaScript 新手,我找不到合适的解决方案(我认为这里不需要循环)。
解决方案
您可以获取Set
并收集所有值。
var arrOne = ["key_1", "key_1", "key_2", "key_3", "key_1", "key_1"],
arrTwo = ["val_1", "val_1", "val_3", "val_3", "val_2", "val_3"],
newObj = arrOne.reduce(
(o, k, i) => ({ ...o, [k]: [...new Set([...(o[k] || []), arrTwo[i]])] }),
{}
);
console.log(newObj);
推荐阅读
- python - 为什么我的康威人生游戏更新不正确?
- react-native - 反应本机 Loopback 4 套接字实现
- sql-server - 如何判断两个SQL表中的数据是否相同?
- html - 如何在 div 内创建弯曲的透明圆圈
- c# - 无法在文本框中显示日期
- linux - 如何摆脱两个 bash : 行?
- regex - 如何使用 YYYY/MM/DD 日期格式解决 Codeigniter 验证问题
- reactjs - 如何将 firebase 集成到我之前包含一些减速器的 redux 项目中?
- tomcat - 我正在使用Tomcat服务器,移动网页时需要无限加载
- reactjs - 动作被派发但什么也没发生