JavaScript:如何将字典转换为元素列表?

时间:2013-07-13 00:00:51

标签: javascript

最优雅的解决方法是什么:

{
    'a': 'aa',
    'b': 'bb'
}

进入这个:

[
    ['a', 'aa'],
    ['b', 'bb']
]

4 个答案:

答案 0 :(得分:10)

只需遍历按键:

var dict = { 'a': 'aa', 'b': 'bb' };
var arr = [];

for (var key in dict) {
    if (dict.hasOwnProperty(key)) {
        arr.push( [ key, dict[key] ] );
    }
}

Fiddle(根据@ Jack的评论更新,仅添加直接属性)

答案 1 :(得分:2)

使用lodash.js(或underscore.js

var obj = {'a': 'aa', 'b': 'bb'};

_.pairs(obj);

//[['a', 'aa'], ['b', 'bb']]

lodash.jsunderscore.js的有力继任者,起源于原始项目的分支。在我看来,任何重视时间的人都必须使用。

答案 2 :(得分:2)

我认为以下解决方案非常优雅:

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/

答案 3 :(得分:1)

如果您的浏览器支持Object.getOwnPropertyNamesArray.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 Train points out,如果您只对可枚举属性感兴趣,Object.keys也会有效。在这个例子中,两者都会有相同的结果。