如何在JavaScript中创建动态数组元素名,在for循环中

How to create dynamic array element names in JavaScript, inside a for loop?

本文关键字:for 循环 数组元素 创建 JavaScript 动态      更新时间:2023-09-26

我在JS片段中有一个for循环,我想根据字符串和当前迭代数动态生成数组成员的名称。基本上我写的是这样的:

product_data[i] = {
  "ch-" + i: '1',
  'product' + i: jsondata[products][i].product_description,
  'quantity' + i: jsondata[products][i].quantity,
  'price' + i: jsondata[products][i].unit_price,
  'rem' + i: '',
  'fpa' + i: jsondata[products][i].vat
};
然而,

根本不起作用。我也用过eval(),但运气不好。什么好主意吗?

如果您的环境支持,您可以在对象初始化器中使用新的ECMAScript表示法来表示计算的属性名:

var product_data = new Array(2);
for (var i = 0; i < 2; i++) {
  product_data[i] = {
    ["ch-" + i]: i,
  };
}
console.log(product_data);

否则,你可以使用好的大括号符号,像这样:

var product_data = new Array(2);
for (var i = 0; i < 2; i++) {
  product_data[i] = {};
  product_data[i]["ch-" + i] = i;
}
console.log(product_data);

此功能自ES6以来就存在。你可以这样使用:

var obj = {
  [myKey]: value,
}

所以你的例子变成了:

product_data[i] = {
               ["ch-" + i]: '1',
               ['product' + i]: jsondata[products][i].product_description,
               ['quantity' + i]: jsondata[products][i].quantity,
               ['price' + i]: jsondata[products][i].unit_price,
               ['rem' + i]: '',
               ['fpa' + i]: jsondata[products][i].vat
               };

如果你不想使用EcmaScript 6,你必须将你的对象初始化为一个空对象,然后添加属性给它:

product_data[i] = {};
product_data[i]["ch-" + i] = '1'
...

你可以这样做

product_data[i] = {};
product_data[i]["ch-"+i] = '1';
product_data[i]["product"+i] = jsondata[products][i].product_description;
...

等等……