我正在学习JavaScript,并且正在研究将数字数组排序为奇数和偶数数组的问题。
为了测试我是否成功,我在末尾“更改”了数组(并希望在第一个警报中看到偶数,在第二个别名中看到奇数)。但是,我尝试的所有方法均无效。我只是收到一个1
警报,然后是一个空警报。
谁能告诉我为什么这不起作用?
var numbs = [1, 2, 34, 54, 55, 34, 32, 11, 19, 17, 54, 66, 13];
Sort(numbs);
function Sort(nums) {
var evens = [];
var odds = [];
for (var i = 0; i < arguments.length; i++) {
if (nums[i] % 2) {
evens.push(nums[i]);
} else {
odds.push(nums[i]);
}
}
alert(evens.toString());
alert(odds.toString());
}
最佳答案
for (var i = 0; i < arguments.length; i++) {
^^^^^^^^^^^^^^^^
这是你的问题。
arguments
引用传递给函数的所有参数的数组(例如,arguments
的function(a, b, c)
值为[a, b, c]
)。因此,在您的情况下,由于只有一个参数,因此arguments.length
将为1
。实际上,正如您可能已经收集到的,通常不需要使用
arguments
。通常,如果想知道是否已提供参数,则只需检查参数是否为undefined
,并且使用arguments
会大大降低代码的速度。您可能几乎根本不需要在代码中完全使用arguments
。只需将该行替换为:
for (var i = 0; i < nums.length; i++) {
其他一些观察:
您的
if
条件被翻转-它检测数字是否为奇数,而不是偶数。翻转if
和else
语句的主体,或者使用类似nums[i] % 2 !== 1
的名称。在调用函数之前,将
numbs
用作局部变量,然后在函数中将其称为nums
。为什么?这似乎很奇怪和令人困惑,并且对单个名称进行标准化将有助于减少将来的错误。 (如果要传递特定于函数的内容,也可以在函数外部调用它们,例如在userAges
内部调用它们。)您的函数称为
nums
,其首字母为Sort
。这是不常见的,因为JavaScript的标准命名约定规定变量和函数为S
,即以小写字母开头并具有大写字母来区分新单词。缩进似乎很不稳定。这使您的代码更难阅读。尝试使用IDE或某种文本编辑器,它们会自动为您缩进代码,使其更易于阅读。
关于javascript - 无法将数字数组排序为偶数和奇数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27538270/