【问题标题】:JS join arrays with replacementJS用替换连接数组
【发布时间】:2016-07-31 07:53:38
【问题描述】:

有2个数组:

var arr1 = ["a", "b", "c"];
var arr2 = ["k",     ,"l","m","n"];

需要一些返回的标准函数:

var arr3=["k","b","l"];

这个太慢了:

function join_arrays(arr1,arr2)
{
var arr3=[];
for(var i=0;i<arr1.length;i++)
    if(arr2[i]==undefined)
        arr3[i]=arr1[i];
    else
        arr3[i]=arr2[i];
return arr3;
}

【问题讨论】:

  • 你怎么知道它太慢了?
  • 我只需要更快的东西。有大量的数组。
  • 如果你想让你的代码更快,首先不要在i&lt;arr1.length比较中插入arr1.length操作。记住它。

标签: javascript arrays


【解决方案1】:

您可以执行以下操作:

var arr1 = ["a", "b", "c"];
var arr2 = ["k",undefined,"l","m","n"];
var arr3 = [];


function join_arrays(arr1,arr2){
arr3 = arr2;
var i = arr3.indexOf(undefined);
while(i !=- 1){
    arr3[i] = arr1[i];
    i = arr3.indexOf(undefined);
    }
return arr3;
}

但是,这里有一点需要注意的是,就我在 JSBin 中的测试向我展示的那样,您必须像我在示例中所做的那样,将要替换为 undefined 的空值明确设置。如果这对您来说不是最佳选择,那么可能有比我在这里展示的更好的方法。

希望这比您的代码运行得更快,因为它只会根据需要多次循环进行替换,并且会立即用arr2 填充arr3

更新:

请记住,虽然上述函数有效,但它是不安全的,因为当第二个数组的索引中包含第一个中不存在的空元素时,它会导致错误。因此你可以这样做:

function join_arrays(arr1,arr2){
arr3=arr2;
var i = arr3.indexOf(undefined);
while(i!=-1 && i<arr1.length){
    arr3[i]=arr1[i];
    i=arr3.indexOf(undefined);
    }
return arr3;
}

因此对于var arr2 = ["k",undefined,undefined,"l","m","n",undefined],使用此方法的结果将是["k", "b", "c", "l", "m", "n", undefined],而不是出现错误或无限循环!

【讨论】:

    【解决方案2】:

    使用标准函数可以更快。

    let arr1 = ["a", "b", "c"];
    let arr2 = ["k",     ,"l","m","n"];
    arr1.map((e,i)=>arr2[i]==undefined?e:arr2[i])
    

    【讨论】:

      【解决方案3】:

      也许这个单一的班轮应该做你的工作。

      var arr3 = arr1.forEach((e,i) => arr2[i] === void 0 ? arr3.push(e): arr3.push(arr2[i]));
      

      【讨论】:

        猜你喜欢
        • 2017-12-17
        • 1970-01-01
        • 2017-06-03
        • 2020-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多