修改数组而不进行突变

red*_*ult 6 javascript arrays

我正在尝试解决一个问题,该问题指出要删除(删除)数组中的最小数字,而最小元素左侧的元素顺序不会改变。我的代码是-:

function removeSmallest(numbers){
    var x =  Math.min.apply(null,numbers);
    var y = numbers.indexOf(x);
    numbers.splice(y,1);
    return numbers;
}
Run Code Online (Sandbox Code Playgroud)

指令中严格规定不要改变原始数组/列表。但我收到一条错误,指出您已更改原始 array/list 。如何消除错误?

Sak*_*oor 5

听着,这里不要使用 SPLICE。新手和专家在交替使用拼接和切片而不考虑效果时会犯一个众所周知的错误。

SPLICE将改变原始数组,而SLICE将浅复制原始数组并在给定条件下返回数组的部分。

这里Slice将创建一个新数组

const slicedArray = numbers.slice()
const result = slicedArray.splice(y,1);
Run Code Online (Sandbox Code Playgroud)

并且您无需改变原始数组即可获得结果。


Ana*_*nas 2

您可以创建数组的浅表副本以避免突变。

function removeSmallest(numbers){
    const newNumbers = [...numbers];

    var x =  Math.min.apply(null,newNumbers);
    var y = newNumbers.indexOf(x);
    newNumbers.splice(y,1);

    return newNumbers;
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以回答问题,但提供有关如何和/或为何解决问题的附加上下文将提高​​答案的长期价值。 (3认同)