合并两个没有预定义函数的数组

时间:2019-07-18 09:32:08

标签: javascript

我试图在Js中合并两个数组。我通过学习逻辑却遇到了问题来做到这一点。我在新数组的几个索引处得到未定义的值。

  const arr3 = [];
  const length1= arr1.length;
  const length2 = arr2.length;
  let k = 0;
  const totalLength = length1 + length2;
  for(let i=0 ; i<=totalLength; i++){
      arr3.push(arr1[i]);
       if(i > length1){
        arr3.push(arr2[k]);
         k= k+1;
         }
  }
  return arr3;
}

merge([1,3,25,5], [5,4,9,7]); ```

i am getting an output

[1,3,25,5,未定义,未定义,5,未定义,4,未定义,9,未定义,7]


2 个答案:

答案 0 :(得分:1)

您需要什么:

  • 让索引小于两个数组的长度,
  • 在循环中仅推送一项,然后
  • 检查索引是否小于length1
  • 比第一个阵列的脓液
  • 否则,从第二个数组中获取值并通过减去索引的长度来调整索引以获取从零开始的索引。

function merge(arr1, arr2) {
  const arr3 = [];
  const length1 = arr1.length;
  const length2 = arr2.length;
  let k = 0;
  const totalLength = length1 + length2;

  for (let i = 0; i < totalLength; i++) { // change to <
    if (i < length1) {
      arr3.push(arr1[i]);
    } else {
      arr3.push(arr2[i - length1]);
    }
  }
  return arr3;
}
console.log(merge([1, 3, 25, 5], [5, 4, 9, 7]));

为什么不使用两个for语句,而不是遍历两个数组的长度?

function merge(array1, array2) {
    var i, 
        result = [];
        
    for (i = 0; i < array1.length; i++) result.push(array1[i]);
    for (i = 0; i < array2.length; i++) result.push(array2[i]);
    
    return result;
}

console.log(merge([1, 3, 25, 5], [5, 4, 9, 7]));

答案 1 :(得分:1)

如果要使用代码,请将其更改为:

function merge(arr1,  arr2){
 
const arr3 = [];
  const length1= arr1.length;
  const length2 = arr2.length;
  let k = 0;
  const totalLength = length1 + length2;
  for(let i=0 ; i<totalLength; i++){
 
       if(i >= length1){
        arr3.push(arr2[k]);
         k= k+1;
         }else{
        arr3.push(arr1[i]);
         }
  }
  return arr3;
}

console.log(merge([1,3,25,5], [5,4,9,7]))

或使用其他类似的解决方案:

const merge =(...arg) => [].concat(...arg);

console.log(merge([1,3,25,5],[5,4,9,7]))