【问题标题】:Concat two arrays on different indexes in javascript在javascript中的不同索引上连接两个数组
【发布时间】:2018-11-12 16:10:10
【问题描述】:

我有两个数组:

arr1 = ['1', 'x', '0', 'x']

arr2 = ['2', '5']

我想用第二个数组中的数字按确切顺序替换第一个数组中的“x”,这样我会得到这样的东西:

arr3 = ['1', '2', '0', '5']

我不知道从哪里开始。我试过 concat() 和 slice() 但没有结果。

【问题讨论】:

    标签: javascript arrays concat


    【解决方案1】:

    使用Array.map() 迭代arr1,并使用外部计数器。每当值为'x'时,使用计数器从arr2获取值,并递增计数器:

    const arr1 = ['1', 'x', '0', 'x']
    
    const arr2 = ['2', '5']
    
    let counter = 0;
    const result = arr1.map(c => c === 'x' ? arr2[counter++] : c);
    
    console.log(result);

    如果你可以改变arr2,你可以使用shift来获取物品而不是计数器:

    const arr1 = ['1', 'x', '0', 'x']
    
    const arr2 = ['2', '5']
    
    const result = arr1.map(c => c === 'x' ? arr2.shift() : c);
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      您可以映射数组 1 并检查值并通过使用索引的 clsure 在另一个数组的索引处取值。

      var array1 = ['1', 'x', '0', 'x'],
          array2 = ['2', '5'],
          result = array1.map((i => v => v === 'x' ? array2[i++] : v)(0));
          
      console.log(result);

      【讨论】:

        【解决方案3】:

        你可以这样做

        var arr1 = ['1', 'x', '0', 'x'];
        
        var arr2 = ['2', '5'];
        
        for(var i = 0; i < arr1.length; i++) {
          if (arr1[i] == "x") {
            arr1[i] = arr2[0];// replace 
            arr2.shift(); // delete first element
          }
        }
        
        console.log(arr1);
        

        【讨论】:

        • 不是最好的方法。但最容易理解的一个!
        【解决方案4】:

        如果两个数组的顺序总是正确的,这很简单:

        var arr3 = arr1.map(item => item === 'x' ? arr2.shift() : item);
        

        【讨论】:

          【解决方案5】:

          使用 forloop 比使用 map 更好,因为如果你有更大的数组,它会更快

          例子:

          var arr1 = ['1', 'x', '0', 'x'];
              
          var arr2 = ['2', '5'];
          
          var counter = 0;
          for(int i = 0; i < arr1.length; i++){
          
          if(arr1[i] === 'x'){
            arr1[i] = arr2[counter];
            counter++;
          }
          
          
          
          }

          【讨论】:

            猜你喜欢
            • 2019-04-16
            • 1970-01-01
            • 1970-01-01
            • 2018-10-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多