我正在尝试访问数组中的每个其他/第二个元素,例如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);
}
}
}
答案 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>