Это ошибка в объектах javascript foreach? - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь преобразовать объект в список пар ключ-значение, используя Object.entries, а затем зацикливаю каждую запись, все в порядке, за исключением того, что порядок результата отличается от объекта, который я даю, когда ключэто как "06" или "01" , или же, которые начинаются с "0"

Это проверено на NodeJs V10.16.0, UTF-8 набор символов.

const obj1 = {
  '01': "val1",
  "06": "val6",
  "13": "val13",
  "88": "val88",
  "100": "val100"
}

Object.entries(obj1).forEach(([k, v]) => {
  console.log(k + "-" + v)
})

Результат кода выше будет:

13-val13
88-val88
100-val100
01-val1
06-val6

Я ожидаю, что результат будет в порядке, аналогичном объекту iвведите , как показано ниже:

01-val1
06-val6
13-val13
88-val88
100-val100

Это происходит только тогда, когда ключ свойства в объекте начинается с "0" , пока еще хорошо подходит другой тип свойства.Пожалуйста, помогите, что это на самом деле?

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Как указано в комментариях, объекты не обязаны перебирать свойства в порядке вставки.Если вам требуется, чтобы порядок итераций соответствовал порядку вставки, используйте вместо него Map:

const map1 = new Map([
  ['01', "val1"],
  ["06", "val6"],
  ["13", "val13"],
  ["88", "val88"],
  ["100", "val100"]
]);

for (const [k, v] of map1) {
  console.log(k + "-" + v);
}
0 голосов
/ 23 сентября 2019

Объект JavaScript представляет собой несортированное хранилище значений ключей, также известное как Associative Array .Это сопоставимо с Map с Java или с dict с Python.Нет абсолютно никаких гарантий какого-либо порядка при выборке или переборе ключей, значений или пар ключ-значение.Любой заказ, который вы можете увидеть, связан с внутренней реализацией и на него нельзя положиться.Вы даже не можете полагаться на его детерминированность.

Эти объекты эквивалентны:

const obj1 = {
  '01': "val1",
  "06": "val6",
  "13": "val13",
  "88": "val88",
  "100": "val100"
}
const obj2 = {
  "100": "val100",
  "06": "val6",
  "13": "val13",
  "88": "val88",
  '01': "val1"
}

Для отсортированных записей используйте Карта или * Массив .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...