一、JS合并两个数组
在JS中,可以使用concat()方法将两个数组合并成一个新数组。concat()方法不会改变原数组。示例如下:
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = arr1.concat(arr2);
console.log(arr3); //[1, 2, 3, 4, 5, 6]
二、JS合并两个有序数组
如果需要将两个有序数组合并成一个有序数组,可以使用归并排序法。基本思路是将两个有序数组从头开始比较,将较小的数存入新数组中,并将相应的指针移动一个位置。具体实现如下:
function mergeArr(arr1, arr2) {
const result = [];
let i = 0,
j = 0;
while (i < arr1.length && j < arr2.length) {
if (arr1[i] < arr2[j]) {
result.push(arr1[i++]);
} else {
result.push(arr2[j++]);
}
}
while (i < arr1.length) {
result.push(arr1[i++]);
}
while (j < arr2.length) {
result.push(arr2[j++]);
}
return result;
}
const arr1 = [1, 3, 5, 7];
const arr2 = [2, 4, 6, 8];
const arr3 = mergeArr(arr1, arr2);
console.log(arr3); //[1, 2, 3, 4, 5, 6, 7, 8]
三、JS两个数组合并成一个数组
如果两个数组中可能存在相同的元素,可以使用concat()方法将两个数组合并,再使用Set去重。Set是ES6中引入的一种新的数据结构,它类似于数组,但是只能储存唯一的值。具体实现如下:
const arr1 = [1, 2, 3];
const arr2 = [2, 3, 4];
const arr3 = Array.from(new Set(arr1.concat(arr2)));
console.log(arr3); //[1, 2, 3, 4]
四、JS数组去重合并、数组合并去重
如果要直接对已有数组进行去重合并或者合并去重,可以使用Set和扩展运算符。具体实现如下:
const arr1 = [1, 2, 3];
const arr2 = [2, 3, 4];
//数组去重合并
const arr3 = Array.from(new Set([...arr1, ...arr2]));
console.log(arr3); //[1, 2, 3, 4]
//数组合并去重
const arr4 = [...new Set([...arr1, ...arr2])];
console.log(arr4); //[1, 2, 3, 4]
五、JS把两个数组对象合并
如果两个数组中的元素是一个个对象,则需要按照对象的某个属性进行去重。可以将对象转换为字符串再使用Set去重,最后再将字符串重新转换为对象。具体实现如下:
const arr1 = [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}];
const arr2 = [{id: 2, name: 'Jerry'}, {id: 3, name: 'Lucy'}];
//按照id进行去重合并
const arr3 = Array.from(new Set([...arr1.map(JSON.stringify), ...arr2.map(JSON.stringify)])).map(JSON.parse);
console.log(arr3); //[{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}, {id: 3, name: 'Lucy'}]