怎么合并两个数组

怎么合并两个数组呢,把data2里对应id的remark放进data1对应的id这里面,最终效果就是data3这样

const data1 = [
    { "id": 1, "url": "1111" },
    { "id": 2, "url": "111" },
    { "id": 3, "url": "22222" },
    { "id": 4, "url": "222" },
    { "id": 5, "url": "2222" },
    { "id": 6, "url": "22222是" }
]
const data2 = [
    { "id": 1, "remark": "备注1" },
    { "id": 2, "remark": "备注2" },
    { "id": 3, "remark": "" },
    { "id": 4, "remark": "" },
    { "id": 5, "remark": "" },
    { "id": 6, "remark": "beizhu6" }
]
function fun(arr1, arr2) {
    arr1.map(item => {
        arr2.map(item2 => {
            if (item.id == item2.id) {

            }
        });
    });
    arr2 = [];
    return arr1
}
fun(data1,data2);

data3=[
    { "id": 1, "url": "1111", "remark": "备注1" },
    { "id": 2, "url": "111", "remark": "备注2" },
    { "id": 3, "url": "22222", "remark": "" },
    { "id": 4, "url": "222", "remark": "" },
    { "id": 5, "url": "2222", "remark": "" },
    { "id": 6, "url": "22222是", "remark": "beizhu6" }
]
阅读 3.7k
8 个回答
arr1.forEach((item1,index) => {
    arr1[index] = Object.assign(arr1[index],arr2.filter(item2 => item2.id == item1.id)[0])
})
const data3 = []
for (let i = 0; i < data1.length; i++) {
    data3.push({
        ...data1[i],
        ...data2[i],
    })

}
data1.map(o=>({...o,...data2.filter(v=>v.id===o.id).shift()}))

// 如果两个数组的结构一定相同:
data1.map((o, i) => ({ ...o, ...data2[i] }))
const data1 = [
    { "id": 1, "url": "1111" },
    { "id": 2, "url": "111" },
    { "id": 3, "url": "22222" },
    { "id": 4, "url": "222" },
    { "id": 5, "url": "2222" },
    { "id": 6, "url": "22222是" }
]
const data2 = [
    { "id": 1, "remark": "备注1" },
    { "id": 2, "remark": "备注2" },
    { "id": 3, "remark": "" },
    { "id": 4, "remark": "" },
    { "id": 5, "remark": "" },
    { "id": 6, "remark": "beizhu6" }
]
let getItemById = id => data2.filter(item => item.id === id)[0]
let dataConcat = data1.map(item => {
  return Object.assign(item, getItemById(item.id))
})
function merge (arr1, arr2) {
  let idToIndex = {}
  arr1.forEach((item, index) => {
    idToIndex[item.id] = index
  })
  arr2.forEach(item => {
    let index = idToIndex[item.id]
    if (index !== undefined) {
      Object.assign(arr1[index], item)
    } else {
      arr1.push(item)
      idToIndex[item.id] = arr1.length - 1
    }
  })
  return arr1
}

基本上只能通过数值映射或者循环两个数组来处理

data1.map(i => ({ ...i, ...data2.map(o => ({ id: o.id, remark: o.remark })).find(o => o.id === i.id) }))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题