javascript - 如何基于来自两个不同对象的相同键映射两个不同的值
问题描述
我有两个不同的对象
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 呢?
谢谢你
解决方案
看来您正在尝试生成具有相似键的对象,例如 {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 }]
推荐阅读
- capl - GPIB 的 CAPL 样品(类型 VISA / E3648A)?
- java - 为什么 maven-failsafe-plugin 不显示执行的宁静测试?
- mysql - 对--compatible的无效模式:mysql40
- android - 强制重新启动完整的应用程序以刷新 Cordova 中的包
- apache-kafka - 在 Kafka 0.10.2.x 中为代理设置 log.retentions.hours
- javascript - 如何限制 textarea 上的“撤消/重做”事件?
- perl - 动态增加 Text::TabularDisplay 中的列大小
- node.js - Unable to access response object data outside the function in node js
- postgresql - 使用 Postgres 创建多个脚本的问题
- excel - VBA 到 GAS 脚本转换