任何帮助都将非常感激...我试图弄清楚如何在函数内嵌套循环。如果我把它输入控制台......
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);
我做错了什么?
答案 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);