Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何高效地创建多维javascript数组?_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

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

如何高效地创建多维javascript数组?,javascript,arrays,multidimensional-array,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语法创建相同的数组?在PHP中,您可以

我需要存储类似以下内容的信息:

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语法创建相同的数组?

在PHP中,您可以这样做,因为它也会生成父元素(它实际上会抛出一个警告)。在JavaScript中,它将出错,因为父元素不存在

不要让它变成那样,试着让它一下子变成这样:

var tag_array = {
    design1: {
        '0': [{
            x: 100,
            y: 100,
            w: 710,
            h: 332
        }]
    }
};
这将为您提供所需的结构


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

如果您希望以编程方式执行,则因为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: [ [ {} ] ] }
或数组
[]
(仅当第一个参数为整数时)

或在现有数组或对象上

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

请参阅本文,因为您使用的是字符串,所以使用对象比使用数组更好。但它是字符串“0”而不是整数。数字属性的字符串版本可以与数字索引数组元素@epascarello一起使用,但您是对的。这里不清楚OP需要哪种设置。OP。是的,第一个“0”是字符串。可以替换为任何其他字符串。在javascript中,当您访问属性时,它将作为字符串访问。因为数组只是一种奇特的对象,所以它们的行为方式是相同的
a[0]
a[“0”]
做同样的事情,因为在第一种情况下,在查找属性之前,数字
0
被转换为字符串。@Rocket如何使用您的语法直接插入数字4?如下所示:tag_数组['design1']['0'][4]如果要在同一索引上多次调用它,则需要对其进行一些修改,以检查现有的子数组/对象-1:a)永远不要向
对象添加可枚举属性。prototype
,b)将对象(
{}
)用于非数字属性,而不是arrays@Bergi,我刚做的编辑解决了你的问题吗?
var a = [0,1,2];
a.addDimensions(3,0); // a = [0, 1, 2, [ {} ] ]