首页 > 解决方案 > 如何基于来自两个不同对象的相同键映射两个不同的值

问题描述

我有两个不同的对象

object1 = [{Id:6,类型:“某物”,id_:3},{Id:12,类型:“某物”,id_:6}]

object2 = [{id:18, id_:6}, {id: 15, id_:3}]

预期的结果应该是

对象 = [{Id: 6, id:15}, {Id: 12, id: 18}]

我想在不使用循环的情况下执行此操作,因为数据太大,有没有更好的方法来使用 map/reduce 呢?

谢谢你

标签: javascriptobject

解决方案


看来您正在尝试生成具有相似键的对象,例如 {id:6, id: 15},尝试使用 [{key:3, ids: [6, 15]}] 模式怎么样。旧的

var obj1 = [{Id: 6, Type: "something", id_: 3}, {Id: 12, Type: "something", id_: 6}]
// object = [{Id: 6, id:15}, {Id: 12, id: 18}]
var obj2 = [{id:18, id_:6}, {id: 15, id_:3}]
var comb = obj1.concat(obj2)


var result  = comb.reduce((acc, i ) => { 
  const isExists =  acc.find(({key}) => key === i.id_)
    const {list } = typeof isExists !== "undefined" ? isExists : {}
    const dyno = typeof list !== "undefined" ? list : []
    console.log(isExists, ">>", i)
  
  return [...acc.filter(({key}) => key !== i.id_), {key: i.id_, list: dyno.concat(i.id)}]
}, [])

console.log(result)

更新了一个

var obj1 = [{Id: 6, Type: "something", id_: 3}, {Id: 12, Type: "something", id_: 6}]

var obj2 = [{id:18, id_:6}, {id: 15, id_:3}]
var comb = obj1.concat(obj2)


var result  = comb.reduce((acc, i ) => { 
  const isExists =  acc.find(({key}) => key === i.id_)
    const {list } = typeof isExists !== "undefined" ? isExists : {}
    const dyno = typeof list !== "undefined" ? list : {}
       console.log(i[Object.keys(i)[0]])
    const tmplist = {[Object.keys(i)[0]]: i[Object.keys(i)[0]], ...dyno}
 
  return [...acc.filter(({key}) => key !== i.id_), {key: i.id_, list: tmplist}]
}, [])

console.log(result)
console.log(result.map(({list}) => list ))


输出 Array [Object { id: 18, Id: 12 }, Object { id: 15, Id: 6 }]


推荐阅读