You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中filter处理数组偶数索引元素相乘结果不符问题

问题原因与解决方案

核心问题:误用filter方法的作用

你写的代码里用了filter,但**filter的唯一作用是筛选数组元素,而非转换元素的值**。

filter的回调函数返回值会被当作布尔值处理:

  • 如果返回值是「真值」(比如非0数字、非空字符串等),就把原数组的当前元素保留到结果数组里;
  • 如果返回「假值」,就丢弃该元素。

你的代码里,当索引是偶数时返回a * arr[arr.length-1],比如第一个元素计算得2*5=10(是真值),所以filter会把原元素2保留下来,而不是把10放进结果数组。这就是为什么输出是[2,4]而非预期的[10,20]。

正确实现方式

如果你要先筛选偶数索引的元素,再将每个元素乘以数组最后一个值,可以分两步:先用filter筛选,再用map转换:

const evenLast = arr => {
  return arr.filter((_, idx) => !(idx & 1))
            .map(num => num * arr[arr.length - 1]);
};

console.log(evenLast([2, 3, 4, 5])) // 输出 [10,20]

或者用reduce一步完成筛选+转换,避免额外的数组遍历:

const evenLast = arr => {
  return arr.reduce((result, current, idx) => {
    if (!(idx & 1)) {
      result.push(current * arr[arr.length - 1]);
    }
    return result;
  }, []);
};

内容的提问来源于stack exchange,提问作者Mousa Rahimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:00:02