在不应用的情况下将一个数组插入(拼接?)到另一个数组中

Inserting (splicing?) an Array into another Array without apply

本文关键字:数组 插入 拼接 另一个 一个 应用 情况下      更新时间:2023-09-26

假设我们在JavaScript中有两个数组,[3,4,7][5,6]

在不进行排序或不使用.apply的情况下,将[5,6]插入到索引2处的[3,4,7]中以获得结果Array:[3,4,5,6,7]的最佳方法是什么?

不知道如何定义"最佳方式",但您可以这样做:

a.slice(0,2).concat(b,a.slice(2));

除非你说你真的想突变a阵列,否则你可以这样做:

var c = a.splice(2);
for (var i = 0; i < b.length + c.length; i++) {
    a.push(i < b.length ? b[i] : c[i-b.length]);
}

.splice()将阵列拆分为两部分的这种行为可能会在需要修补的旧IE中出现问题。


或者这可能会更好:

var c = b.concat(a.splice(2));
for (var i = 0; i < c.length; i++) {
    a.push(c[i]);
}

关于.splice()也有同样的警告。

function splice(arrayOne, arrayTwo, index) {
     var result = [];
     for (var i = 0; i < arrayOne.length; i++) {
         if (i == index) {
             result = result.concat(arrayTwo);
         }
        result.push(arrayOne[i]);
     }
     return result;         
}

不太确定为什么不想使用本机方法,但这里有一个非常简单的解决方案,只有循环:

function doInsert(index, items, arr) {
    var insertLen = items.length,
        current;
    for (i = 0; i < insertLen; ++i) {
        current = i + index;
        arr[current + insertLen - 1] = arr[current];
        arr[current] = items[i];
    }
}
var arr = [3, 4, 7];
doInsert(2, [5, 6], arr);
console.log(arr);