JavaScript返回数组全部对象问题求助:仅返回首个元素
问题分析与修复方案
你的代码存在两个关键问题,导致只能返回首个元素,且新添加的汽车信息也无法正确显示:
1. Getter 中的 return 直接终止循环
在cars getter的for循环里,第一次迭代就执行了return,这会直接跳出函数,后续循环根本没机会运行,自然只能拿到第一个元素。你需要先收集所有汽车的字符串信息,最后统一返回。
2. addCar 方法的属性名不匹配
调用addCar时,你用了对象简写{carMake, carModel, carYear},这会生成属性名为carMake、carModel、carYear的对象,但默认汽车对象的属性是make、model、year,两者不匹配,导致新添加的汽车没有正确的属性字段,即使循环修复也无法显示正确信息。
修正后的代码
const carFactory = { _cars:[ { make: 'default', model: 'default', year: 0, } ], get cars(){ if(this._cars.length > 0 ){ // 收集所有汽车的字符串信息 const carInfoList = []; for(let i = 0; i < this._cars.length; i++){ carInfoList.push(`Car Make: ${this._cars[i].make} - Car Model: ${this._cars[i].model} Manufacture Year: ${this._cars[i].year}`); } // 用换行符拼接所有信息,也可根据需求换成分隔符 return carInfoList.join('\n'); }else{ return `Please add car details`; } }, addCar(carMake, carModel, carYear){ this._cars.push({ // 明确指定属性名,和默认对象结构保持一致 make: carMake, model: carModel, year: carYear }) } } carFactory.addCar('Toyota', 'Corolla', 2003); console.log(carFactory.cars);
简化优化(可选)
可以用数组的map方法简化getter代码,更简洁直观:
get cars(){ if(this._cars.length === 0){ return `Please add car details`; } return this._cars.map(car => `Car Make: ${car.make} - Car Model: ${car.model} Manufacture Year: ${car.year}` ).join('\n'); }
内容的提问来源于stack exchange,提问作者VincentRice3
相关产品推荐
相关产品推荐

