本文屬于JS中基礎(chǔ)中的基礎(chǔ)灾搏,但是工作中遇到了就記錄一下
情景復(fù)現(xiàn):
項目中遇到了兩個數(shù)組
const arr1 = [ {name: 'zhangsan'}];
const arr2 = [ {age: 'lisi'}];
需要合并這兩個數(shù)組瘫寝,二話沒說国旷,直接來了一個cancat,但是得聲明一個變量或者重新賦值(因為concat并不改變原始數(shù)組)霹琼,對于我這種奇葩來說,多聲明一個變量或者重新賦值倍感不優(yōu)雅凉当,由此......
- concat
let arr1 =[ 1,2,3];
let arr2 = ['a', 'b', 'c'];
let arr3 = Array.prototype.concat(arr1, arr2);
假如arr2是一個巨型數(shù)組枣申,那么合并后,arr2 就會浪費了一個巨大的內(nèi)存空間看杭,不優(yōu)秀爸姨佟!
- for 循環(huán)
for( let i = 0; i< arr1.length; i++) {
arr2.push(arr[1]);
};
如果arr2仍然是一個巨型數(shù)組楼雹,那么可以考慮使用小型數(shù)組進(jìn)行遍歷模孩,合理使用push和unshift方法,但是for循環(huán)烘豹,不優(yōu)雅肮霞帧!
- 拓展運算符
arr1.push(...arr2);
- reduce
arr2 = arr1.reduce((prev, now) => {
prev.push(now);
return arr2;
}, arr2);
// 或者
arr1 = arr1.reduceRight((prev, now) => {
prev.unshift(now);
return arr1;
}, arr1);
呃携悯,可能湊合吧祭芦,勉強說的過去了!
- apply
arr1.push.apply( arr1, arr2 );
arr2.unshift.apply(arr2, arr1);
這個東西有點淫蕩憔鬼!
- 優(yōu)化
// 針對巨型數(shù)組的優(yōu)化
function combineInto(arr1, arr2) {
var len = arr1.length;
for (var i=0; i < len; i=i+5000) {
// 一次處理5000條
arr2.unshift.apply( arr2, arr1.slice( i, i+5000 ) );
}
}
完撼班!