【问题标题】:Creating an object from a range of numbers in Javascript?从Javascript中的一系列数字创建一个对象?
【发布时间】:2020-06-13 05:53:46
【问题描述】:

我想创建一个从一系列数字创建的对象,例如给定以下数据

amount: 100
step: 5

我想创建一个包含 20 步(100 除以 5)的对象范围,看起来像这样

{
    0: {label: 0},
    5: {label: 5},
    10: {label: 10}
    ...
    100: {label: 100}
}

我几乎使用数组到达那里

我发现了如何创建一个包含所需对象的数组,但它嵌套了一层,而且它不是对象。

new Array(100/5 + 1)
    .fill()
  .map((val, index) => {
    const key = index * 5
      return {[key]: {label: key}}
  }))

以上返回

[
    0: {
        0: {label: 0}
    },
    1: {
        5: {label: 5}
    },
    2: {
        10: {label: 10}
    }
]

【问题讨论】:

  • 这里的实际用例是什么?为什么一个简单的for 循环不能处理它?
  • 一个for循环可以处理它,但是使用对象和数组函数更干净,不是吗?我刚想出自己的解决方案,谈橡皮鸭开发,将其添加为答案
  • 坦率地说,我想不出比用这样的 map 多次调用函数更糟糕的方法来解决这个问题了。当然,只使用for 循环会更有效。

标签: javascript arrays object ecmascript-6


【解决方案1】:

只需迭代到 100 并逐步增加 5,然后使用方括号概念创建对象键和值

const obj = {};
const limit = 100;
const step = 5;

for (let i = 0; i <= limit; i = i + step) {
  obj[i] = {
    label: i
  }

};

console.log(obj)

【讨论】:

    【解决方案2】:

    使用Object.fromEntriesArray.from

    const result = Object.fromEntries(
      Array.from({ length: 100 / 5 }, (_, i) => [i * 5, { label: i * 5 }])
    );
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多