2014-09-25 50 views
1

JS新手,我遇到了这个问题。我知道我只是想念一些东西。我感谢任何帮助答案。我包含了我的尝试代码。 (不要笑)删除数组中的所有值,甚至不是

//Loop through arr removing all values that aren't even 
//hint x % 2 --> checks for even numbers 

var arr = [1,2,3,6,22,98,45,23,22,12]; 
for (var i = 0; i > arr.length; i++) { 
    while (i % 2 !== 0) { 
     arr.splice(i); 
    } 
} 
alert(arr); 
+0

这个拼接需要至少两个参数。 – 2014-09-25 02:48:34

+0

您的代码有问题吗?你有什么问题? – 2014-09-25 02:51:38

+0

感谢您指出拼接错误。 (这应该是一个明显的错误。) – Steran 2014-09-27 05:02:59

回答

0
var arr = [1,2,3,6,22,98,45,23,22,12]; 
for (var i = arr.length; i >= 0; i--) { 
     if(arr[i] % 2 !== 0) { 
     // splice takes two arguments at least index to start removing and the number of elements to remove 
     arr.splice(i, 1); 
    } 
} 

console.log(arr); 
+0

谢谢!我选择这个答案是因为它对我目前的JS知识水平来说是最好的。 – Steran 2014-09-27 05:09:43

1
var arr = [1,2,3,6,22,98,45,23,22,12]; 
var arr2=[]; 
arr.forEach(function(e){if (e%2!==0) arr2.push(e)}); 
alert(arr2); 

所以,你必须在阵列称为arr,并且要建立这一个新的数组。您附加了一种内置于现代javascript中的方法,称为“forEach”,这意味着对于数组的每个值,它都会执行()之间的函数。变量e表示元素,它使您可以访问它所在的当前数组项。所以如果e%2!== 0(又如果e是奇数),把它推到新的数组中。然后,在它结束了所有事情之后,你有了新的阵列。

3

你也可以使用.filter如果您指定新的浏览器或节点:

var arr2 = arr.filter(function(o) { 
    return o % 2 !== 0; 
}); 
+0

很酷。我还没有看到**过滤器**,所以感谢您的介绍。 – Steran 2014-09-27 05:06:05

4

这是一个很好的把戏我从一个要点了,你真正需要使用反向循环以避免搞乱指数

for (var i = arr.length; i >= 0; i--) { 
    if (i % 2 !== 0) { 
     arr.splice(i); 
    } 
} 

这是一个跨浏览器选项,您还可以使用过滤器@agreco说,但不可用在每个浏览器