在函数内移动代码不起作用

时间:2014-10-12 03:16:03

标签: javascript function nested-loops

任何帮助都将非常感激...我试图弄清楚如何在函数内嵌套循环。如果我把它输入控制台......

var i, arr = [1, 2, 3, 4, 5, 6];
var remove = [];
for (i = 0; i < arr.length; i++) {
        if (Number(arr[i]) != i % 2) {
            remove.push(arr[i]);
            arr.splice(i, 1);
        }
    }
console.log(remove);

返回所需的数组,从arr中删除所有偶数。但是,如果我将它包装在一个函数中,它是未定义的......

var i, arr = [1, 2, 3, 4, 5, 6];
var remove = [];

function reject() {

    for (i = 0; i < arr.length; i++) {
        if (Number(arr[i]) != i % 2) {
            remove.push(arr[i]);
            arr.splice(i, 1);
        }
    }
};


console.log(remove);

我做错了什么?

3 个答案:

答案 0 :(得分:1)

当代码不在函数中时,脚本中的每一行都会在解释时执行(粗略地说)。

如果在函数中包含一些代码,则必须调用函数才能应用它的效果。

此外,您应该尝试在函数内部保留一些变量,例如,您的i计数器可以是函数的本地,而不是函数的全局范围。

因此,请使用函数名称来应用它的效果:

var arr = [1, 2, 3, 4, 5, 6];
var remove = [];

function reject() {
    var i;
    for (i = 0; i < arr.length; i++) {
        if (Number(arr[i]) != i % 2) {
            remove.push(arr[i]);
            arr.splice(i, 1);
        }
    }
};

reject(); // Difference here, we're calling the function.
console.log(remove);

答案 1 :(得分:0)

在尝试记录remove的值之前,需要调用该函数。

var i, arr = [1, 2, 3, 4, 5, 6], remove = [];
function reject() {
    for (i = 0; i < arr.length; i++) {
        if (Number(arr[i]) != i % 2) {
            remove.push(arr[i]);
            arr.splice(i, 1);
        }
    }
};
reject();
console.log(remove);

答案 2 :(得分:0)

其他人已经回答了问题所在,你必须调用该函数。但是,如果你改进它不使用全局变量,你可能更需要调用它并且代码更清晰。

var arr = [1,2,3,4,5];
function reject(input) {
    var output = []; 
    for (var i = 0; i < input.length; i++) {
        if (Number(arr[i]) != i % 2) {
            output.push(arr[i]);
            input.splice(i, 1);
        }
    }
    return output;
};
var remove = reject(arr);