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

JavaScript根据一个数组过滤另一数组并返回指定键值

实现目标

存在两个数组:

  • daysOfWeek:存储当前周日期的字符串数组
  • investmentsData:存储投资数据的对象数组,每个项包含value(投资金额)、date(对应日期)两个属性
    需要筛选出日期同时存在于两个数组中的投资项,提取这些项的value组成结果数组,预期输出为[0.77, 1.50, 0.80, 1.00, 0.77, 0.79]。
原代码问题
  1. flatMap内的filter逻辑返回的是匹配到的日期字符串,没有提取目标字段value
  2. 逻辑冗余,生成结果后需要额外遍历一次清除空值,无法单步完成需求
正确实现

直接通过filter+map链式调用即可,全程不需要额外处理空值:

const result = investmentsData
  .filter(invest => daysOfWeek.includes(invest.date))
  .map(invest => invest.value);

console.log(result); // [0.77, 1.5, 0.8, 1, 0.77, 0.79]

逻辑说明

  • 首先通过filter遍历投资数据,仅保留日期在周日期列表中的有效项,直接过滤掉日期不匹配的无效数据
  • 再通过map遍历有效项,直接提取value字段,整个流程不会产生undefined等空值,无需额外过滤步骤。

如果数据量较大,想要减少遍历次数提升性能,可以用reduce单次遍历完成筛选和取值:

const result = investmentsData.reduce((res, current) => {
  if (daysOfWeek.includes(current.date)) {
    res.push(current.value);
  }
  return res;
}, []);

内容的提问来源于stack exchange,提问作者Patricia Saraiva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:18:25