JavaScript 最新最全 多个数组 合并/去重/排序

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)


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值