从数组中删除不均匀的所有值

时间:2014-09-25 02:36:26

标签: javascript arrays

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

4 个答案:

答案 0 :(得分:4)

这是我从一个要点得到的一个很好的技巧,你实际上需要使用反向循环以避免弄乱索引

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

这是一个crossbrowser选项,您也可以像@agreco所说的那样使用过滤器,但不是每个浏览器都可用

答案 1 :(得分:3)

如果您要定位较新的浏览器或节点,也可以使用.filter

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

答案 2 :(得分: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 :(得分: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);