2016-09-12 2 views
0
var a = ['a1', 'b2', 'd4', 'c3']; 
var dict = {}; 

for(var i=0; i<a.length; ++i) { 
dict[(a[i].match(/\d+/)[0])] = a[i]; 
} 
console.log(dict); 

for(var i=0; i<a.length; ++i) { 
dict[a[i]] = a[i].match(/\d+/)[0]; 
} 
console.log(dict); 

В первом случае, когда ключи являются числами, мы имеем выход со словарными ключами, отсортированными.Словарь-ключи автоматически сортируются, если ключи являются номерами

Но во втором случае, когда ключи не являются числами, у нас есть вывод со словарными клавишами в том порядке, в котором они были добавлены!

Это какая-то скрытая функция, я имею в виду, она надежна каждый раз?

+2

Массивы сохраняют свой заказ, объекты не являются (словарь не является термином JS) –

+0

Хотя явно не указано, браузеры _usually_ возвращают ключи объектов в порядке вставки. Однако ни в коем случае не следует полагаться на то, что это всегда так, поскольку для этого нет необходимости. – vlaz

+0

В обоих случаях я спрашивал о словаре, а не массиве. – Viki

ответ

0

В вашем примере a является array и dict является просто object.

Сохраняется порядок предмета array.

Нет никаких указаний относительно порядка атрибутов object, но порядок часто совпадает с порядком, в котором они были определены ... если структура не изменяется. Таким образом, нет гарантии относительно порядка.

+0

Пожалуйста, просмотрите отредактированный вопрос, чтобы избежать каких-либо споров – Viki

Смежные вопросы