无法理解Javascript new Array(new Array(5,4,3,2,1,0),new Array())

Unable to understand what Javascript new Array( new Array(5,4,3,2,1,0),new Array())

本文关键字:Array new Javascript      更新时间:2023-09-26

请告诉我这段代码在做什么,它是创建多维数组(我认为它不是)吗?

. .

代码片段

 var hanoi_peg = new Array(
   new Array(  5,  4,  3,  2,  1,  0 ),
   new Array( -1, -1, -1, -1, -1, -1 ),
   new Array( -1, -1, -1, -1, -1, -1 )
 );

谢谢. .

它正在创建一个数组的数组。这与多维数组并不完全相同,但它的目的是相似的。

你可以得到值3,例如,这样做:

console.log(hanoi_peg[0][2]);

通常你会使用数组文字表示法:

var hanoi_peg = [
   [  5,  4,  3,  2,  1,  0 ],
   [ -1, -1, -1, -1, -1, -1 ],
   [ -1, -1, -1, -1, -1, -1 ]
];

数组的数组和多维数组的区别在于数组的数组不是存储在单个连续的内存块中,因此可以是锯齿;第二层的数组不一定都有相同数量的元素。例如,这是完全有效的:

var a = [
    [1, 2, 3, 4, 5],
    [1, 2, 3],
    [1, 2, 3, 4, 5, 6]
];

在一个真正的多维数组中,有一个连续的内存块(实际上是一个大的单维数组),编译器/运行时只是对索引进行数学运算以找到正确的槽位。例如,一个真正的5x5多维数组将是一个连续的25个槽的集合,当您请求[2][4]的条目时,编译器/运行时将其转换为[(2*5)+4]并返回槽索引为14的内容。

但是对于数组的数组,[2][4]是两种不同的操作:首先,获取[2]的条目,这是对数组的引用;然后从该数组中获取[4]处的条目

将其登录到您的控制台中,您将看到它创建了一个数组的数组,并且它用于相同的目的。

var hanoi_peg = new Array(
   new Array(  5,  4,  3,  2,  1,  0 ),
   new Array( -1, -1, -1, -1, -1, -1 ),
   new Array( -1, -1, -1, -1, -1, -1 )
 );
console.log(hanoi_peg);

要访问每个项目,必须使用double []操作符,像这样。要访问第一个数组的第一项,需要调用

console.log(hanoi_peg[0][0]);

相同
var firstArray = hanoi_peg[0];
var firstItemOfFirstArray = firstArray[0]; // hanoi_peg[0][0]

正在创建一个数组的数组

new Array()将返回新的数组对象。数组有2个重载构造函数。

new Array(length)

返回指定长度的数组,所有元素设置为undefined。注意,这只会在length为整型时发生。如果您尝试new Array('str'),这将返回['str']。如果你使用new Array(2.5),它会抛出错误,因为参数是数字而不是整数。

new Array(element list)

这将创建包含上述元素的数组。

当你执行new Array(new Array(1,2,3))时,new Array(1,2,3)会先执行返回[1,2,3]然后new Array([1,2,3])返回[[1,2,3]]

var hanoi_peg = new Array(
   new Array(  5,  4,  3,  2,  1,  0 ),
   new Array( -1, -1, -1, -1, -1, -1 ),
   new Array( -1, -1, -1, -1, -1, -1 )
 );
console.log(hanoi_peg);
console.log(new Array('str'))

你的代码是这样的

 //define array
            var hanoi_peg = [];
            //define 1st element and its array also
            hanoi_peg[0] = [5,  4,  3,  2,  1,  0];
            //define 2nd element and its array also
            hanoi_peg[1] = [-1, -1, -1, -1, -1, -1];
            //define 3rd element and its array also
            hanoi_peg[2] = [-1, -1, -1, -1, -1, -1];
            
        console.log("full array: "+JSON.stringify(hanoi_peg));
        /*
        [
         [5,  4,  3,  2,  1,  0],
         [-1, -1, -1, -1, -1, -1],
         [-1, -1, -1, -1, -1, -1]
        ]
        */
        console.log("first element of array: ",hanoi_peg[0]);//[5,  4,  3,  2,  1,  0];
        console.log("first element of inner array: "+hanoi_peg[0][0]);//5