【问题标题】:How to create an Object from an array in the order of the array elements [duplicate]如何按照数组元素的顺序从数组创建对象[重复]
【发布时间】:2017-09-07 21:25:57
【问题描述】:

我想创建一个简单的对象。

示例:{house:'house, cat: 'cat', dog: 'dog', 45: 45 }

然而 javascript 总是采用我的数组中的数字

示例:45 - 45:45

并将其放置在我的对象的最顶部/最前面。

问题 1: 为什么会发生这种情况?

问题 2: 如何按数组中的顺序创建对象(是的,我知道它们在对象中的放置方式并不重要,因为它们都有键)但请帮忙。

let jakesLife = [
    'house',
    'cat',
    'dog',
    45
    ]
function x () {
    let obj = {};
    for (let i = 0; i < jakesLife.length; i++) {
        obj[jakesLife[i]] = jakesLife[i];
    }
    return obj;
}
x()

【问题讨论】:

  • 如果您想添加更多信息或澄清,请编辑您的问题。

标签: javascript arrays object dictionary


【解决方案1】:

对象是无序的。这就是我们有数组的原因。您的有序键列表应该足以在您需要时获得有序访问。

如果你经常需要,你可以创建一个对象类型来处理它。

let jakesLife = [
  'house',
  'cat',
  'dog',
  45
]

class Ordered {
  constructor(arr) {
    this.__keys = arr;
    arr.forEach(k => this[k] = k)
  }
  
  each(callback) {
    this.__keys.forEach(k => callback(this[k], k))
  }
}

var o = new Ordered(jakesLife);
o.each(v => console.log(v));

【讨论】:

  • 鉴于每个属性值都与属性键相同,我认为没有任何理由将它们存储为任何东西的属性。
  • @Bergi:玩具示例。 :)
  • 即便如此,如果存在“实际值”的附加映射(除了带有排序的数组),我认为没有理由将值复制到实例的属性中,而不仅仅是将映射本身存储在.__values 或其他东西中。
猜你喜欢
  • 2022-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 2022-07-20
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多