我正在尝试编写一个将两个排序数组a和b合并的函数。但是,当数组b的值为0时,它将仅显示数组a作为输出:

function mergeSortedArrays(a,b) {
  var merged = [],
  aElm = a[0],
  bElm = b[0],
  i = 1, //index for array a
  j = 1; //index for array b

  if (a.length == 0) {
    return b;
  }
  if (b.length == 0) {
    return a;
  }

  while (aElm || bElm) {
    if ((aElm && !bElm) || aElm < bElm) { //problem is that it thinks that 0 == !bElm
      merged.push(aElm);
      aElm = a[i++];
    } else {
      merged.push(bElm);
      bElm = b[j++];
    }
  }
  return merged;
}
mergeSortedArrays([2,5,6,9], [0,1,2,3,29]) //outputs [2,5,6,9]


我知道问题是因为0为假,所以在条件if(aElm && !bElm)下,它将不断将aElm推入merged。有什么更好的方式写条件,以便它可以将0识别为整数而不是不存在的?

最佳答案

有什么更好的方式写条件,以便它可以将0识别为整数而不是不存在的?


编写条件的更好方法是不测试数组元素的存在,而是检查索引。

function mergeSortedArrays(a,b) {
  var merged = [],
      i = 0, //index for array a
      j = 0; //index for array b

  while (i < a.length || j < b.length) {
    if (j == b.length || a[i] < b[j]) {
      merged.push(a[i++]);
    } else {
      merged.push(b[j++]);
    }
  }
  return merged;
}

09-27 00:07