数组合并
此处说明两种比较简单的方式:
- concat实现
特点:不改变原数组,生成新数组。
- ES6的扩展运算符(...)实现:
特点:简洁。
缺点:两种方式都存在的问题是:没有过滤掉重复元素“4”。
扩展:过滤数组的重复元素实现。
let arr1=[1,2,3,4];
let arr2=[4,5,6,7,8];
// 需求:求arr1和arr2合并后的数组,不能有重复的元素。
let arr3=arr1.concat(arr2);
console.log('concat合并后',arr3);
let arr4=[...arr1, ...arr2];
console.log('用扩展运算符合并后',arr4);
// 过滤重复元素
/* Array.from() 方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例 */
let arr5=Array.from(new Set(arr4)); // 方式1
console.log('过滤重复元素后1',arr5);
let arr6=[...new Set(arr4)] // 方式2
console.log('过滤重复元素后2',arr6);
let arr7=arr4.filter((item, index,arr)=>{ // 方式3
// 所有元素只存一次
if(arr.indexOf(item)===index){
return item;
}
})
console.log('过滤重复元素后3',arr7);
let arr8=[]
for(let i=0; i<arr4.length;i++){ // 方式4for循环
// 只存第一次遍历到的元素
if(arr8.indexOf(arr4[i])===-1){
arr8.push(arr4[i])
}
}
console.log('过滤重复元素后4',arr8);
结果:
对象合并
- for(let...in):结果是改变了没有被遍历的对象。
- ES6扩展运算符(...)
- ES6的新增API:Object.assign(targetObj,obj1[,obj2,...])
它们感叹的特点是:如果有属性重复时,后者的属性值被采纳。
/* 对象合并*/
//1、 for(let...in){}
let obj1={
name:'a',
age:12
}
let obj2={
sex:'男',
class:'1',
age:20,
}
for(let key in obj2){
obj1[key]=obj2[key];
}
console.log('对象合并后1', obj1);
let obja={
name:'a',
age:12
}
let objb={
sex:'男',
class:'1',
age:20,
}
//2、 ES6新的APIObject.assgin(obj1, obj2)
let newObj2=Object.assign(obja, objb)
console.log('对象合并后2', newObj2);
//3、ES6的扩展运算符: {...obj1, obj2}
let newObj3={...obja, ...objb};
console.log('对象合并后3', newObj3);
结果: