javascript - 如何在 JavaScript 中将两个依赖数组缩减为一个对象?

标签 javascript arrays reduce

作为 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);

关于javascript - 如何在 JavaScript 中将两个依赖数组缩减为一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55381688/

相关文章:

javascript - 按值删除元素 a-la Knockout

c - 使用 sprintf、C 填充字符串

pyspark - 使用 pySpark reduceByKey 的词袋

loops - 实现循环的快速方法

javascript - Reduce 函数上的几个 Typescript(不可分配给类型参数)错误

javascript - 如何在Nodejs中实例化 Controller 中的模型?

javascript - Angular : Pass additional parameters to chained promises

c# - 函数返回一个空的 DataTable,但我可以看到正在导入 "individual"个元素

javascript - 向 div 的内容追加/添加文本和函数

javascript - Polymer拖放事件对象属性包含父srcElement