使用Array.find仅返回对应日期的首个匹配数据,如何获取全部符合条件的数组条目
问题根因
- JavaScript 内置的
Array.find()方法的原生设计就是仅返回数组中第一个满足匹配条件的元素,若需要获取数组中所有符合条件的条目,需替换为Array.filter()方法,该方法会返回包含所有匹配项的新数组。 - 现有代码的另一个问题是用于收集结果的
filteredData6定义在map循环内部,每次遍历不同日期分组时都会被重置,且状态更新逻辑放在循环内会触发多次不必要的重渲染。
修正后代码
// 结果收集变量提到循环外部,避免被重置 let filteredData6 = []; let allNightBefore = []; data.map((arr) => { // filter返回当前日期分组下所有符合medicationTime要求的条目 const currentNightBeforeList = arr.filter(o => o.medicationTime === "night before food"); // 收集所有匹配的nightbefore条目用于打印 allNightBefore.push(...currentNightBeforeList); // 遍历所有匹配条目,汇总药品数据 currentNightBeforeList.forEach(nightbeforeItem => { filteredData6.push(...nightbeforeItem.Medicines); }) }) // 打印所有符合条件的nightbefore条目 console.log(allNightBefore); // 统一更新状态,避免频繁重渲染 setmedicine6(filteredData6);
补充说明
如果业务逻辑确认每个日期分组arr内最多只会有一条匹配medicationTime的记录,也可以保留find逻辑,只需要额外声明数组收集每个分组的find结果即可,无需替换为filter。
内容的提问来源于stack exchange,提问作者vivek kn
相关产品推荐
相关产品推荐

