我正在学习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引用传递给函数的所有参数的数组(例如,argumentsfunction(a, b, c)值为[a, b, c])。因此,在您的情况下,由于只有一个参数,因此arguments.length将为1

实际上,正如您可能已经收集到的,通常不需要使用arguments。通常,如果想知道是否已提供参数,则只需检查参数是否为undefined,并且使用arguments会大大降低代码的速度。您可能几乎根本不需要在代码中完全使用arguments

只需将该行替换为:

for (var i = 0; i < nums.length; i++) {




其他一些观察:


您的if条件被翻转-它检测数字是否为奇数,而不是偶数。翻转ifelse语句的主体,或者使用类似nums[i] % 2 !== 1的名称。
在调用函数之前,将numbs用作局部变量,然后在函数中将其称为nums。为什么?这似乎很奇怪和令人困惑,并且对单个名称进行标准化将有助于减少将来的错误。 (如果要传递特定于函数的内容,也可以在函数外部调用它们,例如在userAges内部调用它们。)
您的函数称为nums,其首字母为Sort。这是不常见的,因为JavaScript的标准命名约定规定变量和函数为S,即以小写字母开头并具有大写字母来区分新单词。
缩进似乎很不稳定。这使您的代码更难阅读。尝试使用IDE或某种文本编辑器,它们会自动为您缩进代码,使其更易于阅读。

关于javascript - 无法将数字数组排序为偶数和奇数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27538270/

10-12 12:23
查看更多