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

将对象数组作为函数参数传入为何得到Object?

为何传入数组参数却得到Object,导致filter调用报错?

可能的原因及解决方法:

  1. this指向不符合预期
    调用searchMicroservices(this.microservices, this.search)时,this的上下文可能并非你定义microservices的目标对象。比如在事件回调、定时器或未绑定的方法中,this可能指向全局对象、DOM元素或其他对象,此时this.microservices就不是你定义的数组,甚至会变成意外的Object。

    • 解决:在调用函数前添加打印,确认this指向和microservices的类型:
      console.log('当前this:', this, 'microservices类型:', typeof this.microservices, '是否为数组:', Array.isArray(this.microservices));
      
      如果是Vue等框架场景,确保方法正确绑定(比如通过methods定义方法,或用箭头函数保留上下文)。
  2. microservices被意外修改为Object
    在调用函数前,可能有其他代码将this.microservices从数组改成了Object。比如误写赋值语句:

    // 错误示例:把数组替换成了对象
    this.microservices = { title: 'wrong' };
    
    • 解决:全局搜索所有修改this.microservices的代码,排查错误赋值的情况。
  3. 语法错误导致数组定义失效
    你给出的microservices定义存在语法错误:第二个对象的description: 'test1}缺少闭合单引号,这会导致JavaScript解析异常,破坏变量的正常结构,使microservices变成非数组类型。

    • 解决:修复语法错误,将description: 'test1}改为description: 'test1',确保数组定义合法。

额外防护步骤

可以在函数内部先做类型校验,避免报错:

searchMicroservices: function (array, searchValue) {
  if (!Array.isArray(array)) {
    console.error('参数不是数组:', array);
    return []; // 返回空数组或其他默认值
  }
  return array.filter((microservice) => {
    return microservice.title?.toUpperCase().match(searchValue.toUpperCase())
  })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:55:21