123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * @Author: your name
- * @Date: 2021-08-13 17:17:06
- * @LastEditTime: 2021-08-25 10:49:48
- * @LastEditors: Please set LastEditors
- * @Description: In User Settings Edit
- * @FilePath: \md-\test\test.js
- */
- // 雷姆提问,如何将两个数组中key值同样的项合并
- const arr = [
- {key: 1, a: 'a'},
- {key: 1, b: 'b'},
- {key: 2, a: 'a'},
- {key: 2, b: 'b', c: 'c'},
- {key: 3, a: 'a', b: 'b'},
- {key: 4, a: 'a', b: 'b'},
- ]
- const arr_res = [
- {key: 1, a: 'a', b: 'b'},
- {key: 2, a: 'a', b: 'b', c: 'c'},
- {key: 3, a: 'a', b: 'b'},
- {key: 4, a: 'a', b: 'b'},
- ]
- // 湿鸡版本
- var obj = arr.reduce((_,o)=>{
- _[o.key] ? (_[o.key] = Object.assign(_[o.key],o)) : (_[o.key] = o);return _;
- },{})
- var a = [];
- for( var key in obj ){
- a.push(obj[key])
- }
- console.log(a);
- // 晨晨版本
- const map = new Map()
- let crt
- for (const item of arr) {
- crt = map.get(item.key)
- map.set(item.key, {...crt, ...item})
- }
- const res = [...map.values()]
- console.log(res)
- // 晨晨的一行版本
- let x = arr.reduce((r, o) => ((r[o.key] = {...r[o.key], ...o}), r), []).filter(i => i)
- console.log(x)
- // 晨晨大佬一行版本修改
- let x2 = arr.reduce((r,o)=>{
- // 通过解构进行合并不同的项
- r[o.key] = {...r[o.key], ...o}
- return r
- },[])
- // 因为key值不是百分百都对应数组的下标.所以用filter过滤
- x2 = x2.filter(i=>i)
- console.log(x2);
|