带有对象和数组的JavaScript动态数组

时间:2013-11-15 14:58:10

标签: javascript arrays object

我在使用JavaScript创建包含对象的列表时遇到问题:该对象将包含一个Integer值和一个数组。

结构将如下所示(此代码有效):

var list = [ {
            id : 1234,
            dependencyList : [ {
                id : 2142
            }, {
                id : 5313
            } ]
        }, {
            id : 4312,
            dependencyList : [ {
                id : 2142
            }, {
                id : 5313
            } ]
        } ];

问题是我想动态创建这个列表,换句话说就是这样:

var list = [];

var object;
object.id=1234;
object.dependencyList = [];
object.dependencyList.push(2222);

list.push(object);

当我尝试alert(list[0].length)并且它返回0并且在使用JSON.stringify(list)之后它只返回[[]]时,此代码不起作用。

任何人都知道这方面的解决方案吗?

4 个答案:

答案 0 :(得分:1)

list[0]是一个对象,而不是一个数组,这就是为什么你没有看到length的任何内容。尝试:

console.log(Object.keys(list[0]).length);

或者您甚至可以console.log(list[0])并检查您的控制台以确保它包含某些内容。

另外,我认为你的意思是:

var object = {};

因为否则objectundefined,您的脚本将无效。你需要改变的另一件事是:

object.dependencyList.push(2222);

为:

object.dependencyList.push({id: 2222});

答案 1 :(得分:1)

未定义对象。做:

var object = {};

答案 2 :(得分:0)

你应该做list[0].dependencyList.length)你也应该改变: object.dependencyList.push(2222); 对于 object.dependencyList.push({id: 2222});

答案 3 :(得分:0)

对象是你的朋友。

如果你需要创建很多这些东西,你应该定义它们在函数中的形状。这样做的一个优点是,您可以创建一个用于添加依赖项的setter,该依赖项将实现隐藏为对特定成员变量的推送。

这样的事情:

function createObject( id ) {
    var object = {};
    object.id = id;
    return object;
}

function createObjectWithDependencies( id ) {
    var object = createObject( id );
    object.dependencyList = [];

    object.addDependency = function( dependentObject ) {
        object.dependencyList.push( dependentObject );
    }

    return object;
}

var list = [];

var object = createObjectWithDependencies( 1234 );
object.addDependency( createObject( 2142 ) );
object.addDependency( createObject( 5313 ) );
list.push( object );

var object = createObjectWithDependencies( 4312 );
object.addDependency( createObject( 2142 ) );
object.addDependency( createObject( 5313 ) );
list.push( object );

console.log( list );
相关问题