【问题标题】:How to create dynamic array element names in JavaScript, inside a for loop?如何在 JavaScript 中的 for 循环中创建动态数组元素名称?
【发布时间】:2016-11-03 18:07:30
【问题描述】:

我在 JS sn-p 中有一个 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(),但也没有任何运气。有什么想法吗?

【问题讨论】:

  • 提供完整的jsondata json,方便我们帮忙
  • 在我们给您答案之前,您确定要这样做吗?在处理数组时,您处理的是相同类型的列表。如果你要改变它,使每个索引项都有一组不同的键,也许有不同的方法。
  • 将其创建为对象,然后您可以使用 stringify()
  • @DmitryYudin 我不相信 json 数据是必要的。它可以像迭代次数本身一样简单。
  • 我也对这种方法有点警惕。也许在对象哈希中存储一个(唯一的?)id 会是一种更简单的方法。

标签: javascript arrays concatenation


【解决方案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);

否则,你可以使用good ol'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);

【讨论】:

    【解决方案2】:

    这个特性从 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'
    ...
    

    【讨论】:

    • 也感谢您的回答!左投赞成票,但我的代表太小了没有被记录;)
    【解决方案3】:

    你可以这样做

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

    等等……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 2014-10-19
      • 2022-12-12
      • 2020-05-24
      • 1970-01-01
      相关资源
      最近更新 更多