javascript - 为什么 slice 方法在此代码中包含 end 参数?

标签 javascript arrays sorting slice mergesort

我看到这个视频解释了 JavaScript 中的合并排序 https://www.youtube.com/watch?v=ppNZ4bmrmGs&t=195s

据我所知,slice() 方法选择从给定起始参数开始到给定结束参数结束的元素,但不包括。那么,当这个人尝试为存储索引 0 到结束参数的子数组创建一个变量时,它怎么会包含结束参数呢? :

const leftSide = array.slice(0, middle);
const rightSide = array.slice(middle, array.length);

这是其余的代码:

const mergeSort = array => {
  //Check if array can be split
  if(array.length < 2) return array;
  //Get Middle index
  const middle = Math.floor(array.length / 2);
  //Split Array In Two Sides
  const leftSide = array.slice(0, middle);
  const rightSide = array.slice(middle, array.length);
  //Use recusion to continue splitting
  console.log('split:', leftSide, rightSide);
  return merge(mergeSort(leftSide), mergeSort(rightSide));
}

const merge = (left, right) => {
  //Create New Array
  const result = [];
  //Check if left array and right array is empty
  while(left.length && right.length) {
    //Find lower value
    if(left[0] <= right[0]) {
      //Add left value
      result.push(left.shift());
    } else {
      //Add right value
      result.push(right.shift());
    }
  }
  //Merge left array
  while(left.length) result.push(left.shift());
  //Merge right array
  while(right.length) result.push(right.shift());
  //return result array
  console.log('result:', result);
  return result;
}

console.log(mergeSort([5, 3, 7, 10, 4, 1, 5]));

最佳答案

在大多数编码语言中,索引从 0 开始的结果是,您可以通过获取索引小于 n 的所有元素来访问前 n 个元素。大多数编码语言的机制都遵循这一点,例如 splice 等函数的包含-独占属性。看看你的测试数组是如何分割的:

5 3 7 10 4 1 5

对于偶数长度的列表,分成 2 份很简单;两侧的长度相同。对于奇数长度列表,您必须选择左侧更大还是右侧更大,在此实现中选择了右侧(因此使用了 floor)。长度为7,因此middle设置为floor(7/2)=3。这意味着分割的左侧长度应为 3(因此 5 3 7),右侧长度应为 4。如果计算索引,您会发现 7 有索引2。因此,如果您从 03 包含-排除分区,则包含直到第三个元素或第二个索引的所有内容,这正是所需的。

关于javascript - 为什么 slice 方法在此代码中包含 end 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61241965/

相关文章:

我不能从函数返回数组吗? C

java - 如何使用字节数组从 String.format 获取格式化字符串?格式化字符串具体意味着什么?

Java Collections.sort Comparator修改私有(private)对象ID?

java - 对两个平行数组进行排序

javascript - 如何验证我的预订日期?

javascript - 在 Promise .then 中无法访问 $scope

javascript - 三个js定义几何轴

javascript - react native ,如何将剪贴板中的文本粘贴到文本输入中

java - 根据其他值将值添加到数组

javascript - 按字符串属性值对 JavaScript 对象排序