以下代码旨在从整数数组(数字)中删除最小数字。我不能理解为什么它会返回一个受.sort().reverse().pop();
影响的数组。
我原以为将var numbersTest
分配给numbers
意味着数字本身不受上述方法的影响。
任何人都可以了解一下这个javaScript功能吗?
function removeSmallest(numbers) {
var numbersTest = numbers;
var lowestNum = numbersTest.sort().reverse().pop();
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] === lowestNum) {
numbers.splice(i, 1);
}
}
return numbers;
}
removeSmallest([1,2,3,4,5]);
此函数返回[5, 4, 3, 2]
我想要[2,3,4,5]
答案 0 :(得分:2)
有两种方法可以在javascript中传递变量 - 按值或按引用传递。 简而言之: 只有通过值传递的简单数据类型(如数字或字符串),其他类型(数组,对象,...)才能通过引用传递。如果你有多个对一个对象的引用,对其中一个对象执行更改将影响所有对象(因为只有引用)。在第一次近似中,当影响符号链接影响文件本身时,您可能会将其视为unix中的符号链接或Windows中的快捷方式。 在这里查看更多信息: Javascript by reference vs. by value http://snook.ca/archives/javascript/javascript_pass
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以使用新引用创建一个新数组,如下所示:
var numbersTest = new Array(numbers);
这可能是一个更简单的解决方案:
function removeSmallest(numbers) {
numbers.sort().splice(0, 1);
return numbers;
}
removeSmallest()函数有缺陷,因为整数在javascript中按字母顺序排序。更好的答案是:
function removeSmallest(numbers) {
numbers.sort(sortNumber).splice(0,1);
return numbers;
}
function sortNumber(a,b) {
return a - b;
}
答案 3 :(得分:0)