如何使对象充满数组?

时间:2012-03-31 18:05:00

标签: javascript arrays object

我想制作一个这样的结构:

var myThings = {
    thing1: {
        ['24-04-12', '90'],
        ['25-04-12', '90'],
        ['26-04-12', '90']
    },
    thing2: {
        ['24-04-12', '10'],
        ['25-04-12', '30'],
        ['26-04-12', '210']
    }
}

(有4件事,硬编码)。

每个对象中的数组将被添加到循环中,因此我的代码如下所示:

var myThings = {"thing1":{}, "thing2":{}};

然后我无法弄清楚如何将我的数组推入对象。

我是愚蠢的,还是这不是这样做的?

非常感谢!

3 个答案:

答案 0 :(得分:5)

您需要使用Array代替Object。像

var myThings = {
    thing1: [
        ['24-04-12', '90'],
        ['25-04-12', '90'],
        ['26-04-12', '90']
    ],
    thing2: [
        ['24-04-12', '10'],
        ['25-04-12', '30'],
        ['26-04-12', '210']
    ]
}

现在,thing1thing2Arrays,您可以使用Array.prototype.push将新的Arrays推送到Array

Object.keys( myThings ).forEach(function( thing ) {
    myThings[ thing ].push( ['01-01-12', '42'] );
});

该代码会将['01-01-12', '42']添加到该对象中的所有当前things

免责声明:以上代码包含ES5。你需要一个支持它的浏览器或者一个Shim来模拟

答案 1 :(得分:3)

我会这样做:

//create your array dynamically
var array1 = [['24-04-12', '90'],
        ['25-04-12', '90'],
        ['26-04-12', '90'] ];

var myThings = {
    thing1: array1
        ,
    thing2: array1
}

这样,对象的属性就是数组。

答案 2 :(得分:0)

不应将内部项目作为对象,而应将它们作为数组。对象必须存在于键值对中,这对您的使用没有意义。数组也是键值对,但关键是索引号。

var myThings = {
    thing1: [ // thing1 is now an array of arrays
        ['24-04-12', '90'],
        ['25-04-12', '90'],
        ['26-04-12', '90']
    ],
    thing2: [ // thing2 is now an array of arrays
        ['24-04-12', '10'],
        ['25-04-12', '30'],
        ['26-04-12', '210']
    ]
}; // don't forget this semicolon...

然后您将访问最内层的值,如下所示:

myThings.thing1[0][1]; // gives you back '90'
myThings.thing2[2][0]; // gives you back '210'

如果要迭代myThings对象,请使用for...in loop。如果要迭代任何内部数组,请使用regular for loop。只要你do NOT use for...in on the arrays:)