将对象数组作为函数参数传入为何得到Object?
为何传入数组参数却得到Object,导致filter调用报错?
可能的原因及解决方法:
this指向不符合预期
调用searchMicroservices(this.microservices, this.search)时,this的上下文可能并非你定义microservices的目标对象。比如在事件回调、定时器或未绑定的方法中,this可能指向全局对象、DOM元素或其他对象,此时this.microservices就不是你定义的数组,甚至会变成意外的Object。- 解决:在调用函数前添加打印,确认
this指向和microservices的类型:
如果是Vue等框架场景,确保方法正确绑定(比如通过console.log('当前this:', this, 'microservices类型:', typeof this.microservices, '是否为数组:', Array.isArray(this.microservices));methods定义方法,或用箭头函数保留上下文)。
- 解决:在调用函数前添加打印,确认
microservices被意外修改为Object
在调用函数前,可能有其他代码将this.microservices从数组改成了Object。比如误写赋值语句:// 错误示例:把数组替换成了对象 this.microservices = { title: 'wrong' };- 解决:全局搜索所有修改
this.microservices的代码,排查错误赋值的情况。
- 解决:全局搜索所有修改
语法错误导致数组定义失效
你给出的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
相关产品推荐
相关产品推荐

