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

React过滤仅生效数组最后一个值的问题求助

问题排查与解决

问题根源

你当前的代码在forEach循环里每次都直接给filterData重新赋值,相当于每次循环都基于原始的state.products重新过滤,前面循环的结果会被后面的完全覆盖。当循环到最后一个元素"Green"时,filterData就只保留了匹配"Green"的结果,所以看起来只有最后一个元素生效。

修正后的代码

const searchParameters = data && Object.keys(Object.assign({}, ...data));

filterData = state.products.filter((item) => {
  // 判断item是否匹配action.payload中的任意一个关键词
  return action.payload.some((keyword) => {
    return searchParameters.some((parameter) => {
      return item[parameter]
        .toString()
        .toLowerCase()
        .includes(keyword.toLowerCase());
    });
  });
});

代码说明

  • 直接在state.products.filter的回调里,用action.payload.some()来判断当前item是否匹配payload数组中的任意一个关键词
  • 这样一次过滤就能完成所有关键词的匹配,不会出现循环覆盖的问题
  • 逻辑和你原本的一致:只要item的任意一个参数包含payload中的任意一个关键词,就会被保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:03:10