JavaScript 基础 - Array专题 - 拼接合并
文章目录
方法一:for循环
: 更改原数组;
let arr1 = [1,2,3]
let arr2 = [4,5,6]
// for(let i = 0,len=arr2.length;i<len;i++){
// or
for(let i in arr2){
arr1.push(arr2[i])
}
console.log(arr1)//(6) [1, 2, 3, 4, 5, 6]
方法二:concat()
方法: 不更改原数组,生成新数组;
let arr1 = [1,2,3]
let arr2 = [4,5,6]
let arr3 = arr1.concat(arr2)
console.log(arr3)//(6) [1, 2, 3, 4, 5, 6]
方法三:ES6
方法: 不更改原数组,生成新数组;
let arr1 = [1,2,3]
let arr2 = [4,5,6]
let arr3 = [...arr1,...arr2]
console.log(arr3)//(6) [1, 2, 3, 4, 5, 6]
// 结合push()方法的变体,会改变原数组
arr.push(...arr2)
console.log(arr1)//(6) [1, 2, 3, 4, 5, 6]
方法四: push().apply()
方法:更改原数组;
注意当第二个数组太大时不要使用这个方法来合并数组,因为事实上一个函数能够接受的参数个数是有限制的。具体可以参考 apply()
。MDN push()文档
let arr1 = [1,2,3]
let arr2 = [4,5,6]
// 将第二个数组融合进第一个数组
// 相当于 arr1.push(4,5,6);
Array.prototype.push.apply(arr1, arr2);
// or
arr1.push.apply(arr1, arr2)
console.log(arr1)//(6) [1, 2, 3, 4, 5, 6]
注意:
1. 我们通常合并/拼接数组之前会判断两个数组的长度的谁大谁小关系,这样可以减少数组元素的操作次数;
2. 我们需要注意我们是否想要改变原数组;
扩展:
1. 数组扁平化处理;
(参考)
// 基础数组扁平化处理
const arr = [[1,2,3],[4,5],6]
function arrayFlattening(arr){
return arr.reduce( function (pre,cur) {
return pre.concat(cur)
})
}
console.log(arrayFlattening(arr))
// 多重嵌套数组的扁平化处理
var arr2 = [1,[2,[3,[4,[5,6]]]]]
function complexArrayFlattening(arr) {
return arr.reduce((pre,cur) => {
return pre.concat( Array.isArray(cur) ? complexArrayFlattening(cur) : cur )
},[])
}
console.log(simple(arr2)) // [1,2,3,4,5,6]
2. 合并多个数组去重算法示例;
(参考)
const arr1 = [1,2,3]
const arr2 = [3,4,5,6]
function arrayDuplicateRemoval(arr1,arr2){
let arr = arr1.concat()
// or let arr = arr1.slice(0)
for(var i=0;i<arr2.length;i++){
arr.indexOf(arr2[i]) === -1 ? arr.push(arr2[i]) : 0;
}
return arr;
}
console.log(arrayDuplicateRemoval(arr1,arr2))//(6) [1, 2, 3, 4, 5, 6]
// es6 方法
function arrayDuplicateRemoval(arr1,arr2){
const arr = arr1.concat(arr2)
return [...new Set(arr)]
}
console.log(arrayDuplicateRemoval([1,2,3],[2,3,5,6]))//(5) [1, 2, 3, 5, 6]
3. 合并多个有序数组排序去重算法示例;
(参考)
const arr1 = [7,4,2,3,1]
const arr2 = [3,4,5,6]
function arrayDuplicateRemovalSort(arr1,arr2){
const arr = arr1.concat(arr2)
return [...new Set( arr.sort( ( a , b ) => a - b ) ) ]
}
console.log(arrayDuplicateRemovalSort(arr1,arr2))// (7) [1, 2, 3, 4, 5, 6, 7]
4. js合并两个数组生成对应的key:value键值对数组;
(参考)
const nameArr = ['zhangsan','lisi','wangwu']
const valueArr = [1,2,3]
function toNameValue(nameArr,valueArr){
let arr = []
for (let i = 0,len = nameArr.length ; i < len ; i++ ) {
arr.push({
name : nameArr[i],
value : valueArr[j]
})
}
return arr
}
const keyValueArr = toNameValue(nameArr,valueArr)
console.log(keyValueArr)