Angular中如何正确赋值数组?现有代码仅返回最后一项
解决get_bid()方法仅返回最后一项的问题
你遇到的核心问题是循环中直接覆盖数组变量,而非累加元素,我们来一步步修正:
问题根源
你的代码里每次循环都执行 higest_bid_array = this.crypto[i].highestBid,这会把之前存储的内容完全替换成当前crypto[i]的highestBid值。如果crypto数组有多个元素,最后自然只会保留最后一次循环的结果。
针对你的需求的解决方案
根据你描述的预期返回值[1234, 5647, 8500],分两种常见场景给出修复方案:
场景1:每个crypto[i].highestBid是单个数值
如果你的crypto数组结构类似这样:
this.crypto = [ { highestBid: 1234 }, { highestBid: 5647 }, { highestBid: 8500 } ];
你需要初始化一个空数组,然后把每个元素的highestBid添加进去,而非替换:
get_bid() { const highest_bid_array: number[] = []; // 初始化空数组,建议用具体类型替代any[] for(let i=0; i < this.crypto.length; i++) { highest_bid_array.push(this.crypto[i].highestBid); // 用push添加元素 } return highest_bid_array; }
更简洁的现代JS/TS写法(推荐):
get_bid() { return this.crypto.map(item => item.highestBid); }
场景2:每个crypto[i].highestBid本身是数组
如果你的crypto数组结构是每个元素的highestBid为子数组:
this.crypto = [ { highestBid: [1234] }, { highestBid: [5647] }, { highestBid: [8500] } ];
你需要把这些子数组合并成一个大数组,用扩展运算符或concat:
get_bid() { const highest_bid_array: number[] = []; for(let i=0; i < this.crypto.length; i++) { // 用扩展运算符把子数组的元素逐个添加进去 highest_bid_array.push(...this.crypto[i].highestBid); } return highest_bid_array; }
更简洁的写法:
get_bid() { return this.crypto.flatMap(item => item.highestBid); }
额外提示
- 建议修正变量名拼写(你当前写的
higest少了一个h,改为highest_bid_array),避免拼写错误引发潜在问题; - 尽量不用
any[],根据highestBid的实际类型定义具体数组类型(比如number[]),提升代码类型安全性。
内容的提问来源于stack exchange,提问作者kimson Dooland
相关产品推荐
相关产品推荐

