使用数组作为值生成javascript对象?

时间:2012-01-05 01:38:56

标签: javascript

我有一个数组数组,其数据如下:

[[0,1],[0,2],[0,3],[1,1]]

我想要的是一个看起来像的对象: {0:[1,2,3], 1:[1]}

我试过了:

                var obj = {};

                $.each(List, function(index, value) {
                        obj[value[0]] = value[2];

                    });

但它显然会覆盖密钥的先前值。是否有一种简单的方法可以将所有值添加到每个唯一键(有点像字典)?

1 个答案:

答案 0 :(得分:3)

这将测试该属性是否存在。如果没有,它会创建它并分配数组。

一旦属性和数组存在,它就可以推送值。

var obj = {};

$.each(List, function(index, value) {
    if( !obj[value[0]] )
        obj[value[0]] = [];

    obj[value[0]].push(value[1]);
});

http://jsfiddle.net/dYz8w/


如果您执行此操作,则可以在创建阵列时避免.push()调用...

var obj = {};

$.each(List, function(index, value) {
    if( !obj[value[0]] )
        obj[value[0]] = [value[1]];
    else
        obj[value[0]].push(value[1]);
});

http://jsfiddle.net/dYz8w/1/


请记住,如果您需要保证迭代的顺序,则应使用数组而不是对象。

var arr = [];

$.each(List, function(index, value) {
    if( !arr[value[0]] )
        arr[value[0]] = [value[1]];
    else
        arr[value[0]].push(value[1]);
});

http://jsfiddle.net/dYz8w/3/