之前做项目遇到个问题,本来两个后端说整合数据成一个接口再返回给我,结果他们又说如果整合到一起开销比较大有点麻烦,于是我说让我来整合算了,于是就有了下面的需求…
假如这是后端返回并取到的两个数组
let Arr1 = [
{id: "1", num: "10"},
{id: "2", num: "20"},
{id: "3", num: "30"},
{id: "4", num: "40"},
]
let Arr2 = [
{id: "1",num: "10", total: "100"},
{id: "2",num: "20", total: "200"},
{id: "3", total: "300"},
{id: "4", total: "400"},
]
要把它们合并成下面这样
怎么做到呢
接下来直接上代码
let newObj = {} //创建一个空对象
let newArr = [] //创建一个空数组
let Arr = Arr1.concat(Arr2) //将arr1和arr2合并并放到一个新的数组arr里面
for (let i = 0; i < Arr.length; i++) {
let item = Arr[i] //新数组的每一项
const index = newObj[item.id] //索引
if (index !== undefined) {
newArr[index]={...newArr[index],...item}
}else {
newObj[item.id]=newArr.push(item)-1
}
}
console.log(newArr)
结果
当然你要加新的数组进去也是可以的,比如
let Arr3 = [
{id: "1",name:"TheShy"},
{id: "2",},
{id: "3",},
{id: "4",},
]
新的代码只需合并,
let Arr = Arr1.concat(Arr2).concat(Arr3)
再在else里面判断一下就行了
if(!item.name){
item.name="请输入名字"
}
看结果