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

问题描述 投票:1回答:1

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

[[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];

                    });

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

javascript
1个回答
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/

© www.soinside.com 2019 - 2024. All rights reserved.