首页 > 解决方案 > 当条件评估为真时,JavaScript while 循环被跳过

问题描述

正如标题所说...我练习了创建合并排序功能。似乎合并函数只是跳过了第二个或第三个 while 循环(如果其中一个数组为空,则添加其余数字)。

ri < ri.length 条件被评估为真,但 while 循环被跳过。

function mergeSort(array) {
  console.log("Array length", array.length);
  if (array.length === 1)
    return array;

  const middle = Math.floor(array.length / 2);
  const right = array.slice(middle, array.length);
  const left = array.slice(0, middle);

  let leftSorted = mergeSort(left);
  let rightSorted = mergeSort(right);
  let merged = merge(leftSorted, rightSorted);
  return merged;
}

function merge(left, right) {

  let ret = [];
  let li = 0,
    ri = 0;
  console.log("leftLength", left.length, "rightlength", right.length);
  while (li < left.length && ri < right.length) {
    console.log("li", li, "ri", ri)
    console.log("left[li]", left[li], "right[ri]", right[ri])
    if (left[li] < right[ri]) {
      console.log("pushing from left");
      ret.push(left[li]);
      li++;
    } else {
      console.log("pushing from right");
      ret.push(right[ri]);
      ri++;
    }
  }

  console.log("li", li, "leftLength", left.length, li < left.length);
  while (li < left.length) {

    console.log("pushing from left");
    ret.push(left[li]);
    li++;
  }

  console.log("ri", ri, "rightLength", right.length, ri < right.length);
  while (ri < right.length) {

    console.log("pushing from right");
    ret.push(right[ri]);
    ri = ri + 1;
  }

  return ret;
}

const list = [2, 5, 1, 3, 7, 2, 3, 8, 6, 3]
console.log(mergeSort(list)) // [ 1, 2, 2, 3, 3, 3, 5, 6, 7, 8 ]

标签: javascriptwhile-loopmergesort

解决方案


您的 while 条件有一个错字:lenghttolength


推荐阅读