【问题标题】:Parameter getting overwritten参数被覆盖
【发布时间】:2021-07-19 18:14:21
【问题描述】:

这里的第一个问题...大家好! 所以,我正在做一个函数,我应该从一个数组中获取更高和更低的数字,我得到了这个代码:

const arraySort = (numbers) =>{
    if (!numbers) return console.log('No numbers');
    if (Array.isArray(numbers) === false) return console.log('No array!');
    if (numbers.includes(undefined)) return console.log('undefined in the array');
    let newnumbers=numbers.sort();
    
    let newArray = [newnumbers.reverse().pop(),newnumbers.pop()];
    console.log(`The higher and lower number from the array [${numbers}] is [${newArray}]`);
}

我得到的是“数组 [4] 中的较高和较低的数字是 [-5,3]”。为什么我的 numbers 参数被覆盖了?我尝试创建 newnumbers 变量以使用 .pop() 和 .sort() 方法,但原始变量仍然被覆盖,我真的不知道为什么。有人可以给我一些启示吗? 提前致谢!

【问题讨论】:

  • sort() 修改数组。在排序之前复制数组。
  • newnumbers 不是数组的副本。这是第二个变量,指向与numbers 相同的数组。您可以使用numbers.slice() 进行复制。

标签: javascript variables parameters


【解决方案1】:

代码的最后一部分是修改原始数组:

sort(), reverse(), pop()都会影响原数组。

您应该从制作副本开始。

const arraySort = (numbers) =>{
    if (!numbers) return console.log('No numbers');
    if (Array.isArray(numbers) === false) return console.log('No array!');
    if (numbers.includes(undefined)) return console.log('undefined in the array');
    let newnumbers=[...numbers];
    newnumbers.sort();
    
    let newArray = [newnumbers[newnumbers.length-1],newnumbers[0]];
    console.log(`The higher and lower number from the array [${numbers}] is [${newArray}]`);
}

arraySort([1,2,6,3,5,4]);

pop() 删除数组元素,因此在返回最大和最小元素时最好使用索引。

【讨论】:

    【解决方案2】:

    reverse()sort() 修改原始数组。所以在这里我取排序数组的第一个和最后一个索引。

    const arraySort = (numbers) => {
      if (!numbers) return console.log('No numbers');
      if (Array.isArray(numbers) === false) return console.log('No array!');
      if (numbers.includes(undefined)) return console.log('undefined in the array');
      numbers.sort();
    
      let newArray = [numbers[0], numbers[numbers.length -1]];
      console.log(`The higher and lower number from the array [${numbers}] is [${newArray}]`);
    }
    
    arraySort([4,5,1,2]);

    【讨论】:

      【解决方案3】:

      排序和反向修改原始数组。如果您不想使用扩展运算符对它们进行变异,请改为创建一个 deepcopy。我已经更新了以下功能:

      var arraySort = (numbers) =>{
          if (!numbers) return console.log('No numbers');
          if (Array.isArray(numbers) === false) return console.log('No array!');
          if (numbers.includes(undefined)) return console.log('undefined in the array');
          let newnumbers = [...numbers]
          newnumbers.sort();
          console.log(newnumbers)
          let newArray = [newnumbers[newnumbers.length - 1],newnumbers[0]];
          console.log(`The higher and lower number from the array [${numbers}] is [${newArray}]`);
          }
      

      【讨论】:

        猜你喜欢
        • 2015-06-05
        • 2022-08-22
        • 1970-01-01
        • 2012-05-09
        • 2018-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        相关资源
        最近更新 更多