2014-10-12 75 views
0

任何帮助将非常感谢...我想弄清楚如何在功能中嵌套循环。如果我输入这个控制台...在函数内部移动代码不起作用

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); 

我在做什么错了?

+2

该功能从未被调用过。看到这个例子 - http://jsfiddle.net/hhpbqcqh/ – 2014-10-12 03:18:44

+0

天啊!我花了几个小时在这!非常感谢您的支持! – 2014-10-12 03:23:08

+0

什么是未定义的?您可以在JavaScript教程中了解有关函数的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions – 2014-10-12 03:24:07

回答

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); 
+0

我之前打算感谢您......我仍然是新手和其中的一些基础知识可能需要几小时才能发现。我感谢你的回应。 – 2014-10-12 05:06:17

+0

没问题;)不客气:) – achedeuzot 2014-10-12 05:07:04

0

你需要调用该函数试图登录删除前值。

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); 
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);