数组中的所有其他元素

时间:2018-10-09 14:50:55

标签: javascript arrays

我正在尝试访问数组中的每个其他/第二个元素,例如2、4、6、8等。但是无法使其正常工作。有什么建议吗?

这是我的功能:

 function tall(nummer) {
var tall = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
 if (nummer == 5) {
    for(var i = 0; i <= tall.length; i++) {
        if(!i % 2 == 0) {
            const partall = a => a.filter(e => +e == e && e%2);
            document.getElementById("tall").innerHTML = partall(tall);

        }
    }
}

2 个答案:

答案 0 :(得分:4)

您可以使用bitwise AND &来识别偶数索引并进行过滤。

tall.filter((_,i) => i&1) 

var tall = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
result = tall.filter((_,i) => i&1);

console.log( result );

答案 1 :(得分:0)

该行存在操作顺序问题

if(!i % 2 == 0) {

!的优先级高于%。因此,将i的值强制转换为布尔值(对于任何非零数,则为false),然后将该布尔值强制转换为0以进行模运算(0 % 2的结果始终为0,因此该语句始终评估为true)。如果您想检查i是否为偶数,则可以写为

if(i % 2 == 0)// i divided by two has no remainder

但是,您是在循环中执行此操作,在真实情况下,您将对整个数组应用过滤器。该过滤器操作的结果不会在循环的每次迭代中发生变化,因此确实没有必要重复执行一次以上。

const partall = a => a.filter(e => +e == e && e%2);

+e是一元运算符,用于将e中的值强制为数字(已经是),但随后您将数字与e && e%2进行松散比较,这将导致布尔值(如果数字不能被2整除,则为true)。如果需要所有偶数,可以重写此

const partall = a => a.filter(e => !(e%2));

以下应该起作用。我已完全删除了循环,因为这里没有任何实际功能。

 function tall(nummer) {
var tall = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
 if (nummer == 5) {
    
      const partall = a => a.filter(e => !(e%2));
      document.getElementById("tall").innerHTML = partall(tall);
  }
}
tall(5);
<div id='tall'></div>