如何有效地创建多维javascript数组?

时间:2012-09-05 18:20:22

标签: javascript arrays multidimensional-array

我需要存储类似的信息:

tag_array['design1']['0'][0]['x'] = 100;
tag_array['design1']['0'][0]['y'] = 100;
tag_array['design1']['0'][0]['w'] = 710;
tag_array['design1']['0'][0]['h'] = 332;

如果它是PHP但是它在javascript中不起作用,这将有效。

如何使用正确的javascript语法创建相同的数组?

2 个答案:

答案 0 :(得分:2)

在PHP中,你可以这样做,因为它也会产生父元素(它实际上会发出警告)。在JavaScript中,它会出错,因为父元素不存在。

不要像那样做,而是试着像这样做一切:

var tag_array = {
    design1: {
        '0': [{
            x: 100,
            y: 100,
            w: 710,
            h: 332
        }]
    }
};

这应该为您提供所需的结构。

更新:答案已更新,以反映第一个0可以是字符串的事实。

答案 1 :(得分:-1)

如果你想以编程方式进行,那么因为JavaScript要求你拥有这种类型的结构

tag_array = {};
tag_array['design1'] = {};
tag_array['design1']['0'] = [];
tag_array['design1']['0'][0] = {};
tag_array['design1']['0'][0]['x'] = 100;

您可以创建一个prototype函数来为您创建对象/数组结构

Object.defineProperty(Object.prototype, 'addDimensions', { value: function(){
    var prop = arguments[0];
    if(this[prop] !== undefined){
        if(typeof this[prop] !== 'object') throw 'Property "'+prop+'" is already defined.'
    }else{
        if(arguments.length > 1 && ~~arguments[1] === arguments[1] && arguments[1] >= 0) this[prop] = [];
        else this[prop] = {};
    }
    if(arguments.length > 1){
        this[arguments[0]].addDimensions.apply(
            this[arguments[0]],
            Array.prototype.slice.call(arguments,1)
        );
    }
    return this;
},
enumerable: false });

并在空对象{}

上调用它
var myArrayLikeObject = ({}).addDimensions('design1','0',0); // {design1: [ [ {} ] ] }

或数组[](仅当第一个arg是整数时)

var myMultiArray = [].addDimensions(0,'hi',0); // [ {hi: [ {} ] } ]

或现有的数组或对象

var a = [0,1,2];
a.addDimensions(3,0); // a = [0, 1, 2, [ {} ] ]