合并2个数组里的对象(注意id值要对应上, 比如大嫂18岁), 并且要以age排序

//合并2个数组里的对象(注意id值要对应上, 比如大嫂18岁), 并且要以age排序
let arr = [

{
    "id": 1,
    "text": "大嫂"
},
{
    "id": 3,
    "text": "三嫂"
},
{
    "id": 2,
    "text": "二嫂"
}

];
let brr = [

{
    "id": 1,
    "age": 30
},
{
    "id": 2,
    "age": 23
},
{
    "id": 3,
    "age": 17
}

];
这道题如何更好得方法 除了for循环

阅读 1.8k
2 个回答

如果单纯循环遍历,复杂度就是O(2),可以考虑先遍历一次,把他们都存在一个key的map里面,最后再转化

const map = {}
arr.forEach(e => {
    map[e.id] = {text: e.text};
})
brr.forEach(e => {
    map[String(e.id)].age = e.age;
})
// 此时存的的数据应该是
// map = {
//    1: {text: '大嫂', age: 18}
//}
const result = Object.keys(map).map(key => {
    return {
        id: key,
        ...map[key] 
    }
}).sort((a, b) => a.age - b.age)
arr
    .map(o1 => Object.assign({}, o1, brr.find(o => o.id === o1.id)))
    .sort((o1, o2) => o1.age - o2.age)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题