Самый элегантный способ превратить это:JavaScript: Как превратить словарь в список элементов?
{
'a': 'aa',
'b': 'bb'
}
в этом:
[
['a', 'aa'],
['b', 'bb']
]
Самый элегантный способ превратить это:JavaScript: Как превратить словарь в список элементов?
{
'a': 'aa',
'b': 'bb'
}
в этом:
[
['a', 'aa'],
['b', 'bb']
]
Просто перебирать ключи:
var dict = { 'a': 'aa', 'b': 'bb' };
var arr = [];
for (var key in dict) {
if (dict.hasOwnProperty(key)) {
arr.push([ key, dict[key] ]);
}
}
Fiddle (обновлено на @ комментарий Джека, только добавить прямые свойства)
Не забывайте 'hasOwnProperty()' check :) –
@ Спасибо, обновил мой ответ, чтобы включить это ... – McGarnagle
даже безопаснее {} .hasOwnProperty.call (dict, key). таким образом, в маловероятном случае, когда словарь содержит ключ, называемый «hasOwnProperty», это все равно будет работать –
Использование lodash.js (или underscore.js)
var obj = {'a': 'aa', 'b': 'bb'};
_.pairs(obj);
//[['a', 'aa'], ['b', 'bb']]
lodash.js
является стремящимся преемником underscore.js
, возник как ответвление от исходного проекта. По моему мнению, он должен использоваться для тех, кто ценит свое время.
Ссылка на lodash поможет :) –
Кажется, я читал ваш ум @Jack :) – finishingmove
Никогда не слышал о lib раньше, но выглядит красиво, и это может быть с учетом специфических требований :) –
Если у вас есть браузер, который поддерживает Object.getOwnPropertyNames
и Array.prototype.map
var obj = {'a': 'aa', 'b': 'bb'}, arr;
arr = Object.getOwnPropertyNames(obj).map(function(e) {return [e, obj[e]];});
// [["a", "aa"], ["b", "bb"]]
поддержки браузера стол here
Как Crazy Trainpoints out, если вы заинтересованы только в перечислимых свойств, Object.keys
тоже будет работать. В этом примере оба будут иметь одинаковый результат.
Просто интересно, почему 'Object.getOwnPropertyNames' вместо' Object.keys'? –
... но +1 для решения '.map()'. –
@CrazyTrain 'Object.keys' тоже работает, afaik - единственная разница между ними:' Object.getOwnPropertyNames' возвращает неперечислимые свойства, а также перечислимые. Мне казалось, что OP хочет весь _Object_, независимо от перечислимости. –
Я хотел бы рассмотреть следующее решение очень элегантна:
function toList(dict) {
return Object.keys(dict).map(function (key) {
return [key, dict[key]];
});
}
Теперь вы можете использовать его следующим образом:
var list = toList({
a: "aa",
b: "bb"
});
Он работает во всех современных браузерах без необходимости использования внешних библиотек. См. Демо: http://jsfiddle.net/pEhpu/
Очень похоже на ответ Павла на самом деле :) –
@Jack Это почти то же самое. –
Не было бы это скорее объектом массива, а не словарем для элементов? – adeneo
«Самый элегантный» будет зависеть от вашего личного определения «элегантный». В чем проблема? Вы не знаете, как это сделать, или вам просто не нравится ваше решение? –
Любопытный - зачем вам это нужно как массив? Разве вы не можете его потреблять, как есть? – cirrus