JavaScript根据一个数组过滤另一数组并返回指定键值
实现目标
存在两个数组:
daysOfWeek:存储当前周日期的字符串数组investmentsData:存储投资数据的对象数组,每个项包含value(投资金额)、date(对应日期)两个属性
需要筛选出日期同时存在于两个数组中的投资项,提取这些项的value组成结果数组,预期输出为[0.77, 1.50, 0.80, 1.00, 0.77, 0.79]。
原代码问题
flatMap内的filter逻辑返回的是匹配到的日期字符串,没有提取目标字段value- 逻辑冗余,生成结果后需要额外遍历一次清除空值,无法单步完成需求
正确实现
直接通过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
相关产品推荐
相关产品推荐

