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

JS根据选中值筛选对象子项时调用filter报错如何解决

报错原因
  • list2是普通对象,不是数组,filter是数组实例方法,对象上不存在该方法,直接调用会触发类型错误。
  • 回调函数内使用了赋值运算符=而非全等判断符===,即使数据类型正确逻辑也不成立。
实现方案

list2本身就是以firstArr项的值为键、对应子数组为值的映射结构,不需要做遍历筛选,直接用选中的selectedValue作为键读取对应值即可,性能远高于遍历筛选。
完整联动代码如下:

import { useState } from 'react';

const firstArr = [
  {
    "code": "firstArr item 1",
    "name": "firstArr item 1"
  },
  {
    "code": "firstArr item 2",
    "name": "firstArr item 2"
  },
  {
    "code": "firstArr item 3",
    "name": "firstArr item 3"
  },
];

const list2 = {
  "firstArr item 1": [
      {
          "code": "firstArr Subitem 1",
          "name": "firstArr Subitem 1"
      }
  ],
  "firstArr item 2": [
      {
          "code": "firstArr Subitem 2",
          "name": "firstArr Subitem 2"
      }
  ],
  "firstArr item 3": [
      {
          "code": "firstArr Subitem 3",
          "name": "firstArr Subitem 3"
      }
  ],
};

function LinkageComponent() {
  // 存储一级选中值,可按需设置默认值
  const [selectedVal, setSelectedVal] = useState('firstArr item 1');
  // 读取选中值对应的二级子列表,兜底空数组避免渲染报错
  const currentSubList = list2[selectedVal] || [];

  return (
    <>
      <FirstComponent
        data={firstArr}
        onUpdate={val => {
          setSelectedVal(val);
        }}
      />
      {/* 传入二级组件渲染即可 */}
      <SecondComponent data={currentSubList} />
    </>
  );
}
扩展参考

如果后续遇到必须先把对象转数组再筛选的场景,可以用Object.entries先转换结构再操作:

// 对象转键值对数组后筛选的写法,当前场景不推荐,性能弱于直接按键取值
const targetList = Object.entries(list2)
  .filter(([key]) => key === 'firstArr item 1')[0]?.[1] || [];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:06:24