为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JavaScript中将两个依赖数组简化为一个对象?

如何在JavaScript中将两个依赖数组简化为一个对象?

慕的地10843 2021-03-30 09:14:00
我有两个JavaScript字符串数组,它们是来自SQL查询的结果(每个数组是结果中的一列),其中可能包含重复项,例如: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的新手,我找不到合适的解决方案(我认为这里不需要循环)。
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

您可以采用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);


查看完整回答
反对 回复 2021-04-08
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

const arrOne = ["key_1", "key_1", "key_2", "key_3", "key_1", "key_1"];

const arrTwo = ["val_1", "val_1", "val_3", "val_3", "val_2", "val_3"];

console.log(

  arrTwo.reduce((a, c, i) => {

    if (a[arrOne[i]].indexOf(c) == -1) a[arrOne[i]].push(c);

    return a;

  }, arrOne.reduce((a, c) => {

    a[c] = []; return a;

  }, {})));


查看完整回答
反对 回复 2021-04-08
?
MYYA

TA贡献1868条经验 获得超4个赞

在第一个数组中的一个上使用reduce并使用索引从第二个数组访问属性


var arrOne = ["key_1", "key_1", "key_2", "key_3", "key_1", "key_1"]

var arrTwo = ["val_1", "val_1", "val_3", "val_3", "val_2", "val_3"]


let newObj = arrOne.reduce(function(acc, curr, index) {

  // check if the object has such key and if it dont contain the corresponding value 

  if (acc[curr] && acc[curr].indexOf(arrTwo[index]) === -1) {

    acc[curr].push(arrTwo[index])

  } else {

    acc[curr] = [];

    acc[curr].push(arrTwo[index])


  }


  return acc;

}, {});


console.log(newObj)


查看完整回答
反对 回复 2021-04-08
  • 3 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号