美文网首页
记一次淫荡的数组合并

记一次淫荡的数组合并

作者: 田帅奇 | 来源:发表于2018-10-11 20:52 被阅读0次
本文属于JS中基础中的基础,但是工作中遇到了就记录一下

情景复现:
项目中遇到了两个数组

const arr1 = [ {name: 'zhangsan'}];
const arr2 = [ {age: 'lisi'}];

需要合并这两个数组,二话没说,直接来了一个cancat,但是得声明一个变量或者重新赋值(因为concat并不改变原始数组),对于我这种奇葩来说,多声明一个变量或者重新赋值倍感不优雅,由此......

  • concat
let arr1 =[ 1,2,3];
let arr2 = ['a', 'b', 'c'];
let arr3 = Array.prototype.concat(arr1, arr2);

假如arr2是一个巨型数组,那么合并后,arr2 就会浪费了一个巨大的内存空间,不优秀啊!

  • for 循环
for( let i = 0; i< arr1.length; i++) {
  arr2.push(arr[1]);
};

如果arr2仍然是一个巨型数组,那么可以考虑使用小型数组进行遍历,合理使用push和unshift方法,但是for循环,不优雅啊!

  • 拓展运算符
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);

这个东西有点淫荡!

  • 优化
// 针对巨型数组的优化
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 ) );
    }
}

完!

相关文章

网友评论

      本文标题:记一次淫荡的数组合并

      本文链接:https://www.haomeiwen.com/subject/fvjiaftx.html