【问题标题】:Loop in const object在 const 对象中循环
【发布时间】:2017-12-30 13:31:04
【问题描述】:

我正在尝试执行以下操作:

const obj {
    for(i=0;i<data.length;i++){
       Key[i]: data[i].description
    }
}

(我知道我可能还需要在每一行的末尾添加一个逗号,除了最后一行,但我在前面阶段已经出错了)

这似乎在 JS 中是不允许的。有没有其他选择?谢谢!

【问题讨论】:

  • 你想达到什么目的?
  • 我想创建一个 const obj = {key0: 'value0',key1: 'value1',key2: 'value2',..} 对象,其键和值从 JSON- 动态生成对象。

标签: javascript loops object constants


【解决方案1】:

您可以将Object.assignspread syntax ... 结合使用,并使用Array#map 映射单个对象,并将computed property names 用于对象。

const obj = Object.assign(...data.map((o, i) => ({ ['Key' + i]: o.description })));

【讨论】:

    【解决方案2】:

    您似乎正试图从一个键数组和一个数据数组创建一个对象。

    一个干净的方法是使用数组缩减:

    const obj = data.reduce((obj, d, i) => {
      obj[Key[i]] = d.description;
      return obj;
    }, {});
    

    如果您的环境允许,可以进一步简化(请注意,这将是更简洁的代码但效率较低,因为object spread 每次都会复制整个对象):

    const obj = data.reduce((obj, d, i) => ({
      ...obj,
      [Key[i]]: d.description
    }), {});
    

    但您也可以使用简单的for 循环:

    const obj = {};
    for (let i = 0; i < data.length; i++) {
      obj[Key[i]] = data[i].description;
    }
    

    注意:如果Key.length !== data.length,上面的代码将会中断。

    【讨论】:

    • 非常好!没有选择这个作为最佳答案,因为另一个更符合我的意图(它也动态添加键而不是从另一个数组中获取键),但我最初的问题不是那么清楚,这也是一种非常有用的方法。谢谢!! :)
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 2020-11-12
    • 2021-07-25
    • 1970-01-01
    • 2019-02-12
    • 2021-08-01
    • 2021-07-22
    • 2015-02-04
    相关资源
    最近更新 更多