6

什么是最优雅的方式来改变这个:

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

进入这个:

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

4 回答 4

20

只需遍历键:

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

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

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

于 2013-07-13T00:03:32.323 回答
7

大多数 JavaScript 引擎现在都支持该Object.entries功能:

const list = Object.entries({
    a: "aa",
    b: "bb"
});

console.log(list); // [['a', 'aa'], ['b', 'bb']]

对于较旧的引擎,您可以为它编写一个 polyfill,如下所示:

if (typeof Object.entries !== "function")
    Object.entries = obj => Object.keys(obj).map(key => [key, obj[key]]);

希望有帮助。

于 2013-07-13T01:41:59.340 回答
2

使用lodash.js(或underscore.js

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

_.pairs(obj);

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

lodash.js是一个有抱负的继任者underscore.js,起源于原始项目的一个分支。在我看来,任何珍惜时间的人都必须使用它。

于 2013-07-13T00:15:10.097 回答
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"]]

浏览器支持表在这里


正如Crazy Train 指出的那样,如果您只对可枚举的属性感兴趣,那么也可以Object.keys。在此示例中,两者将具有相同的结果。

于 2013-07-13T01:08:24.810 回答