JavaScript基础:变量受对不同变量执行的方法的影响
以下代码旨在从整数(数字)数组中删除最小的数字。我一辈子都无法理解为什么它返回一个受JavaScript基础:变量受对不同变量执行的方法的影响,javascript,function,Javascript,Function,以下代码旨在从整数(数字)数组中删除最小的数字。我一辈子都无法理解为什么它返回一个受.sort().reverse().pop()影响的数组 我本以为将var numbersTest分配给numbers意味着数字本身不受上述方法的影响 有谁能介绍一下这个javaScript功能吗 function removeSmallest(numbers) { var numbersTest = numbers; var lowestNum = numbersTest.sort().reverse(
.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]);
函数removesmalest(数字){
var numbersTest=数值;
var lowestNum=numbertest.sort().reverse().pop();
对于(变量i=0;i
此函数返回[5,4,3,2]
我想要[2,3,4,5]
在javascript中有两种传递变量的方法-通过值或引用。
简言之:
只有通过值传递的简单数据类型(如数字或字符串),其他类型(数组、对象等)通过引用传递。如果对一个对象有多个引用,对其中一个对象执行更改将影响所有对象(因为只有引用)。在第一种近似情况下,当symlink影响文件本身时,您可能会将其视为unix中的符号链接或windows中的快捷方式。
请参见此处的更多信息:
当你说
var anArray = [1, 2, 3];
var anotherArray = anArray;
这两个变量都指向内存中的同一个数组
问题讨论了复制数组的方法。您可以使用新引用创建一个新数组,如下所示:
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;
}
多亏了,我想我理解这个问题
基本上,JavaScript对象(数组,如mynumbers
array是对象的一种类型)是通过“引用的值”分配的(与通过“值的值”分配的简单数据类型不同)
这意味着分配给某个对象的所有变量通过引用原始对象(即通过指向原始对象)而不是通过拥有自己的独立值来保持该对象的值
如果更改了原始文件,则指向原始文件的变量的值也将更改(反之亦然)
要克隆一个数组(这是我想用我的numbers
array做的),你应该简单地使用var numberclone=numbers.slice(0)
。阅读可以解释。数组是对象,作为对象传递,这意味着numbersTest
和numbers
都引用相同的数组。您必须使用var numbertest=numbers.slice(0)
克隆数组当您使用操作符=
时,您必须理解它的实际含义<代码>=
不会复制对象数据,而是复制引用。谢谢!我已经看过你的链接,现在明白了问题所在。如果以前有人问过这个问题,我很抱歉——我不知道如何在谷歌搜索中表达这个问题。我会回答我自己的问题并相信你。回到你的实际问题,你真的不需要这类。相反的东西,Math.min.apply(null,number)
会很好地完成这项工作。拼接代码也被破坏,用[2,3,1,1,4,5]
测试。