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

时间:2016-11-03 18:07:30

标签: javascript arrays concatenation

我在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()。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您的环境支持,则可以在对象初始值设定项中使用computed property names的新ECMAScript表示法:



var product_data = new Array(2);

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

console.log(product_data);
&#13;
&#13;
&#13;

否则,你可以使用好的&#39; bracket notation,如下:

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

此功能自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'
...

答案 2 :(得分:-1)

你可以这样做

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

等等......

相关问题