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

JavaScript如何使用filter方法筛选匹配对象键名的数组项

错误原因

你写的筛选代码存在两处问题,导致无法得到预期结果:

  • 变量名大小写不匹配:定义的状态对象名为innerstate(s小写),筛选逻辑里误写为innerState(S大写),会直接抛出未定义错误
  • 判断逻辑错误:Object.keys()返回的是由对象键名组成的数组,直接拿字符串类型的v.name和整个数组做不等比较,结果永远为true,完全起不到筛选作用;且逻辑方向写反,你需要匹配name存在于键名列表中的项,而非不相等的项。
修正方案

使用Array.includes()判断当前项的name属性是否存在于键名数组中即可,修正后核心筛选代码如下:

// 先取出innerstate的所有键名组成数组
const stateKeys = Object.keys(innerstate);
const answer = diaryItems.filter(item => stateKeys.includes(item.name));

运行上述代码得到的answer和你给出的预期结果完全一致。

性能优化提示:如果diaryItems数据量较大,可以将键名存入Set来把查找复杂度从O(n)降到O(1):

const stateKeySet = new Set(Object.keys(innerstate));
const answer = diaryItems.filter(item => stateKeySet.has(item.name));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:42:18