JavaScript对象动态分配带索引键的实现问题(Angular代码失效)
问题排查与解决方案
你的代码主要有两个核心问题导致无法生成预期的对象结构:
1. 循环中重复覆盖data对象
每次循环你都直接用data = {...}给data赋值全新对象,这会导致前一次循环添加的属性被完全覆盖,最终data只会保留最后一次循环的结果。
2. 动态对象键名的语法错误
在对象字面量里,你试图用item_id[key]生成带后缀的键名,但这是无效语法。要创建动态键名,必须用方括号包裹表达式来定义键名。
修正后的代码
var data = {}; angular.forEach(vm.fields, function(value, key){ // 动态生成键名,并将属性添加到已有的data对象上 data[`item_id${key}`] = vm.selectedItem[key].id; data[`quantity${key}`] = vm.quantity[key]; }); console.log(data);
代码解释
- 不再每次循环替换整个
data对象,而是直接给已有data添加新属性,确保所有循环的键值对都被保留。 - 使用
[item_id${key}](ES6模板字符串)动态生成item_id0、quantity1这类带后缀的键名,保证每个键名唯一且符合预期格式。
兼容ES5的写法(如果项目不支持ES6)
var data = {}; angular.forEach(vm.fields, function(value, key){ data['item_id' + key] = vm.selectedItem[key].id; data['quantity' + key] = vm.quantity[key]; }); console.log(data);
内容的提问来源于stack exchange,提问作者Emjey23
相关产品推荐
相关产品推荐

