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

如何按属性过滤数组?JavaScript调用filter报错不是函数如何解决

问题根因

Array.filter()是仅数组类型可用的方法,你代码中调用filter的this.filtered[i].categories[y]是单个字符串/数字类型的分类值,不是数组,因此触发类型错误。
从你的输出截图也能验证:console.log(this.filtered[i].categories[y])输出的是单个分类名称,不是集合。

正确实现逻辑

你的需求是筛选出所有categories字段包含输入值的条目,直接用数组迭代方法即可实现,无需嵌套循环:

// value为你从HTML输入框获取的比对值
const matchedList = this.filtered.filter(post => {
  // 检查当前条目的分类数组是否包含目标值
  return post.categories.includes(value)
})

// 后续直接遍历matchedList,将内容拼接后写入innerHTML即可
console.log(matchedList)

如果需要处理类型不一致的情况(比如分类存的是数字ID,输入值是字符串),可以调整判断逻辑:

const matchedList = this.filtered.filter(post => {
  return post.categories.some(cate => String(cate) === String(value))
})

原有代码的问题说明

  • for...in语法优先用于遍历普通对象的属性,遍历数组建议用for...of或者数组自带的迭代方法(filter、map、forEach等),避免意外遍历到原型链属性
  • 你之前的嵌套循环已经遍历到了分类数组的单个元素,不需要再对单个元素做筛选,直接比对即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:39:03