我在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()
。有什么想法吗?
答案 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;
否则,你可以使用好的&#39; bracket notation,如下:
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;
答案 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;
...
等等......