如何在JavaScript中创建二维数组?

Die*_*ego 1081 javascript arrays multidimensional-array

我一直在网上阅读,有些地方说这是不可能的,有人说它是,然后给出一个例子,其他人反驳这个例子,等等.

  1. 如何在JavaScript中声明二维数组?(假设有可能)

  2. 我如何访问其成员?(myArray[0][1]myArray[0,1]?)

Bal*_*an1 1202

var items = [
  [1, 2],
  [3, 4],
  [5, 6]
];
console.log(items[0][0]); // 1
console.log(items[0][1]); // 2
console.log(items[1][0]); // 3
console.log(items[1][1]); // 4
console.log(items);
Run Code Online (Sandbox Code Playgroud)

  • 以这种方式初始化大型多维数组将是困难的.但是,[此函数](http://stackoverflow.com/a/966938/975097)可用于创建空多维,其中维度指定为参数. (31认同)
  • @AndersonGreen你提到了一个对多D阵列解决方案感兴趣的人的链接是一件好事,但问题和Ballsacian1的答案是关于"2D"数组,而不是"multi-D"数组 (2认同)
  • @SashikaXP,这不适用于 0 以外的第一个索引。 (2认同)
  • 问题是如何声明一个二维数组。这就是我一直在寻找的内容,并发现这个和以下答案无法辨别声明和初始化之间的区别。还有已知长度或无界的声明,这两种情况都没有讨论。 (2认同)

Suf*_*ian 423

您只需将数组中的每个项目都设为一个数组.

var x = new Array(10);

for (var i = 0; i < x.length; i++) {
  x[i] = new Array(3);
}

console.log(x);
Run Code Online (Sandbox Code Playgroud)

  • @Diego,是的,但这不是数组的目的.当你的键是字符串时,最好使用一个对象. (40认同)
  • 我比接受的答案更喜欢这个例子,因为这可以用于动态大小的数组,例如`new array(size)`其中`size`是一个变量. (9认同)
  • 他们可以使用字符串作为键和值吗?myArray ['Book'] ['item1']? (5认同)

Mat*_*ley 188

与activa的答案类似,这是一个创建n维数组的函数:

function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args);
    }

    return arr;
}

createArray();     // [] or new Array()

createArray(2);    // new Array(2)

createArray(3, 2); // [new Array(2),
                   //  new Array(2),
                   //  new Array(2)]
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案 !但是,我不建议使用0或1参数(无用) (4认同)
  • @trusktr:是的,您可以根据需要创建任意数量的维度(在内存限制范围内).只需传递四个维度的长度.例如,`var array = createArray(2,3,4,5);`. (3认同)
  • @haykam 抱歉浪费你的时间 - 我只是在讽刺:/ (3认同)
  • 这可以创建一个 4 维数组吗? (2认同)
  • @BritishDeveloper [Yes.](/sf/ask/67635781/#comment7005847_966938) 这是一个 5D 数组,每个数组5 处的长度:`[[[[[null,null],[null,null]],[[null,null],[null,null]]],[[[null,null],[null,null]] ],[[null,null],[null,null]]]],[[[[null,null],[null,null]],[[null,null],[null,null]]],[ [[null,null],[null,null]],[[null,null],[null,null]]]]]` (2认同)

Phi*_*ert 81

Javascript只有一维数组,但你可以像其他人指出的那样构建数组数组.

以下函数可用于构建固定尺寸的二维数组:

function Create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}
Run Code Online (Sandbox Code Playgroud)

列数并不重要,因为在使用之前不需要指定数组的大小.

然后你可以打电话:

var arr = Create2DArray(100);

arr[50][2] = 5;
arr[70][5] = 7454;
// ...
Run Code Online (Sandbox Code Playgroud)

  • @Doug:你实际上想要一个具有2个属性的一维对象数组.var deck = []; deck [0] = {face:1,suit:'H'}; (2认同)

小智 76

最简单的方法:

var myArray = [[]];
Run Code Online (Sandbox Code Playgroud)

  • 这是一个二维数组 (29认同)
  • @Philip你必须在分配`myArray [1] [0] = 5之前设置`myArray [1] = [];` (22认同)
  • 是的,小心.分配myArray [0] [无论如何]很好,但是尝试设置myArray [1] [无论如何]并且它抱怨myArray [1]未定义. (15认同)
  • 请注意,这确实_not_"创建一个空的1x1数组",正如@AndersonGreen所写.它创建一个"1x0"数组(即包含0列数组的1行).`myArray.length == 1`和`myArray [0] .length == 0`.如果然后将"真正空"的"0x0"数组复制到其中,则会产生错误的结果. (4认同)
  • @ 182764125216对我来说这是*一天的知识*。谢谢 :) (3认同)

zur*_*fyx 55

如何创建一个空的二维数组(单行)

Array.from(Array(2), () => new Array(4))
Run Code Online (Sandbox Code Playgroud)

图2和4分别是第一和第二尺寸.

我们正在使用Array.from,它可以采用类似数组的参数和每个元素的可选映射.

Array.from(arrayLike [,mapFn [,thisArg]])

var arr = Array.from(Array(2), () => new Array(4));
arr[0][0] = 'foo';
console.info(arr);
Run Code Online (Sandbox Code Playgroud)

同样的技巧可用于创建包含1 ... N的JavaScript数组


或者(但效率更低 12%n = 10,000)

Array(2).fill(null).map(() => Array(4))
Run Code Online (Sandbox Code Playgroud)

性能下降是因为我们必须初始化第一个维度值才能运行.map.请记住,Array在您通过.fill或直接赋值之前, 不会分配位置.

var arr = Array(2).fill(null).map(() => Array(4));
arr[0][0] = 'foo';
console.info(arr);
Run Code Online (Sandbox Code Playgroud)


跟进

为什么这不起作用?

 Array(2).fill(Array(4)); // BAD! Rows are copied by reference
Run Code Online (Sandbox Code Playgroud)

虽然它确实返回了显然需要的二维数组([ [ <4 empty items> ], [ <4 empty items> ] ]),但是有一个问题:第一维数组已经通过引用复制了.这意味着arr[0][0] = 'foo'实际上会改变两行而不是一行.

var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo';
console.info(arr);
console.info(arr[0][0], arr[1][0]);
Run Code Online (Sandbox Code Playgroud)

  • 我建议这样:`Array.from({length:5}, () =&gt; [])` (3认同)
  • 最好的一句话回答! (2认同)
  • `Array.from(Array(2), () =&gt; new Array(4))` 和 `Array.from(Array(2), () =&gt; Array(4))` 有什么区别? (2认同)

Jam*_*aro 44

有些人说这是不可能的原因是因为二维数组实际上只是一个数组数组.这里的其他注释提供了在JavaScript中创建二维数组的完全有效的方法,但最纯粹的观点是您有一维对象数组,每个对象都是由两个元素组成的一维数组.

所以,这是观点冲突的原因.

  • 不,这不对.在某些语言中,您可以使用多维数组,例如`string [3,5] ="foo";`.对于某些情况,这是一种更好的方法,因为Y轴实际上不是X轴的子节点. (38认同)
  • @ThomasBrowne不完全是."数组数组"需要一些内部数组的大小存储(它们可能不同)和另一个指向解除引用内部数组存储位置的指针.在任何"体面"语言中,多维数组与锯齿状数组不同,因为它们本身就是不同的数据结构.(令人困惑的部分是C数组是多维的,即使它们用[a] [b]语法索引.) (3认同)
  • 一旦它到达底层机器代码,所有尺寸> 1的张量都是数组的数组,无论我们谈论哪种语言.出于缓存优化的原因,值得记住这一点.任何适合数值计算的合适语言都可以让你在内存中对齐你的多维结构,使你最常用的维度连续存储.我想到了Python的Numpy,Fortran和C. 实际上,由于这个原因,有时候将维度降低到多个结构是值得的. (2认同)

Ser*_*reu 32

很少有人展示push的使用:
为了带来新的东西,我将向您展示如何用一些值初始化矩阵,例如:0或空字符串"".
提醒一下,如果你有一个10元素数组,在javascript中最后一个索引将是9!

function matrix( rows, cols, defaultValue){

  var arr = [];

  // Creates all lines:
  for(var i=0; i < rows; i++){

      // Creates an empty line
      arr.push([]);

      // Adds cols to the empty line:
      arr[i].push( new Array(cols));

      for(var j=0; j < cols; j++){
        // Initializes:
        arr[i][j] = defaultValue;
      }
  }

return arr;
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

x = matrix( 2 , 3,''); // 2 lines, 3 cols filled with empty string
y = matrix( 10, 5, 0);// 10 lines, 5 cols filled with 0
Run Code Online (Sandbox Code Playgroud)


dom*_*ukk 27

双内胆:

var a = []; 
while(a.push([]) < 10);
Run Code Online (Sandbox Code Playgroud)

它将生成一个长度为10的数组a,其中包含数组.(Push将一个元素添加到数组并返回新的长度)

  • 单行:`for(var a = []; a.push([])<10;);`? (13认同)

Fra*_*ndi 24

最诚实的答案似乎是

var nrows = ~~(Math.random() * 10);
var ncols = ~~(Math.random() * 10);
console.log(`rows:${nrows}`);
console.log(`cols:${ncols}`);
var matrix = new Array(nrows).fill(0).map(row => new Array(ncols).fill(0));
console.log(matrix);
Run Code Online (Sandbox Code Playgroud)


注意我们不能直接填充行,因为fill使用浅拷贝构造函数,因此所有行都将共享相同的内存...这里的示例演示了如何共享每一行(取自其他答案):

// DON'T do this: each row in arr, is shared
var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo'; // also modifies arr[1][0]
console.info(arr);
Run Code Online (Sandbox Code Playgroud)


Chi*_*ito 18

最简单的方法:

var arr  = [];

var arr1 = ['00','01'];
var arr2 = ['10','11'];
var arr3 = ['20','21'];

arr.push(arr1);
arr.push(arr2);
arr.push(arr3);

alert(arr[0][1]); // '01'
alert(arr[1][1]); // '11'
alert(arr[2][0]); // '20'
Run Code Online (Sandbox Code Playgroud)


Bin*_*esh 18

这就是我所取得的成就:

var appVar = [[]];
appVar[0][4] = "bineesh";
appVar[0][5] = "kumar";
console.log(appVar[0][4] + appVar[0][5]);
console.log(appVar);
Run Code Online (Sandbox Code Playgroud)

这拼写了我bineeshkumar

  • 请注意您如何只能访问父数组的 0 索引。这不像允许您设置的东西那么有用,例如 appVar[5][9] = 10; ...你会得到'无法设置未定义的属性“9”'。 (3认同)

tj1*_*111 16

二维数组的创建方式与单维数组相同.你就像访问它们一样array[0][1].

var arr = [1, 2, [3, 4], 5];

alert (arr[2][1]); //alerts "4"
Run Code Online (Sandbox Code Playgroud)


Kam*_*ski 15

表现

今天 2020.02.05 我在 Chrome v79.0、Safari v13.0.4 和 Firefox v72.0 上对 MacOs HighSierra 10.13.6 进行测试,以选择解决方案。

非初始化二维数组的结论

  • 深奥的解决方案{}/arr[[i,j]](N)对于大数组和小数组最快,看起来它是大稀疏数组的不错选择
  • 基于for-[]/while(A,G) 的解决方案速度快,是小型阵列的不错选择。
  • 解决方案for-[](B,C)速度很快,它们是大阵列的不错选择
  • 基于Array..map/from/fill(I,J,K,L,M) 的解决方案对于小数组来说非常慢,对于大数组来说非常快
  • 令人惊讶的是for-Array(n)(B,C) 在 safari 上比for-[](A)慢得多
  • 令人惊讶的是for-[](A)大阵列在所有浏览器上都很慢
  • 解决方案 K 对于所有浏览器的小数组都很慢
  • 对于所有浏览器的大数组,解决方案 A、E、G 都很慢
  • 对于所有浏览器上的所有数组,解决方案 M 最慢

在此处输入图片说明

初始化二维数组的结论

  • 基于for/while(A,B,C,D,E,G) 的解决方案对于所有浏览器上的小数组来说是最快/相当快的
  • for对于所有浏览器上的大数组,基于(A,B,C,E) 的解决方案是最快/相当快的
  • Array..map/from/fill对于所有浏览器上的小数组,基于(I,J,K,L,M) 的解决方案是中等快或慢
  • 大阵列的解决方案 F、G、H、I、J、K、L 在 chrome 和 safari 上中等或快,但在 firefox 上最慢。
  • {}/arr[[i,j]]对于所有浏览器上的大小数组,深奥的解决方案(N) 是最慢的

在此处输入图片说明

细节

测试未填充(初始化)输出数组的解决方案

我们测试解决方案的速度

  • 小阵列(12 个元素) - 您可以在您的机器上执行测试这里
  • 大数组(100 万个元素)数组 - 您可以在您的机器上执行测试这里

function A(r) {
  var arr = [];
  for (var i = 0; i < r; i++) arr[i] = [];
  return arr;
}

function B(r, c) {
  var arr = new Array(r);
  for (var i = 0; i < arr.length; i++) arr[i] = new Array(c);
  return arr;
}

function C(r, c) {
  var arr = Array(r);
  for (var i = 0; i < arr.length; i++) arr[i] = Array(c);
  return arr;
}

function D(r, c) {
  // strange, but works
  var arr = [];
  for (var i = 0; i < r; i++) {
    arr.push([]);
    arr[i].push(Array(c));
  }
  return arr;
}

function E(r, c) {
  let array = [[]];
  for (var x = 0; x < c; x++) {
    array[x] = [];
    for (var y = 0; y < r; y++) array[x][y] = [0];
  }
  return array;
}

function F(r, c) {
  var makeArray = function(dims, arr) {
    if (dims[1] === undefined) {
      return Array(dims[0]);
    }

    arr = Array(dims[0]);

    for (var i = 0; i < dims[0]; i++) {
      arr[i] = Array(dims[1]);
      arr[i] = makeArray(dims.slice(1), arr[i]);
    }

    return arr;
  }
  return makeArray([r, c]);
}

function G(r) {
  var a = [];
  while (a.push([]) < r);
  return a;
}

function H(r,c) {
  function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args);
    }

    return arr;
  }
  return createArray(r,c);
}

function I(r, c) {
  return [...Array(r)].map(x => Array(c));
}

function J(r, c) {
  return Array(r).fill(0).map(() => Array(c));
}

function K(r, c) {
  return Array.from(Array(r), () => Array(c));
}

function L(r, c) {
  return Array.from({length: r}).map(e => Array(c));
}

function M(r, c) {
  return Array.from({length: r}, () => Array.from({length: c}, () => {}));
}

function N(r, c) {
  return {}
}



// -----------------------------------------------
// SHOW
// -----------------------------------------------

log = (t, f) => {
  let A = f(3, 4); // create array with 3 rows and 4 columns
  A[1][2] = 6 // 2-nd row 3nd column set to 6
  console.log(`${t}[1][2]: ${A[1][2]}, full: ${JSON.stringify(A).replace(/null/g,'x')}`);
}

log2 = (t, f) => {
  let A = f(3, 4); // create array with 3 rows and 4 columns
  A[[1,2]] = 6 // 2-nd row 3nd column set to 6
  console.log(`${t}[1][2]: ${A[[1,2]]}, full: ${JSON.stringify(A).replace(/null/g,'x')}`);
}

log('A', A);
log('B', B);
log('C', C);
log('D', D);
log('E', E);
log('F', F);
log('G', G);
log('H', H);
log('I', I);
log('J', J);
log('K', K);
log('L', L);
log('M', M);
log2('N', N);
Run Code Online (Sandbox Code Playgroud)
This is presentation of solutions - not benchmark
Run Code Online (Sandbox Code Playgroud)

测试填充(初始化)输出数组的解决方案

我们测试解决方案的速度

  • 小阵列(12 个元素) - 您可以在您的机器上执行测试这里
  • 大数组(100 万个元素)数组 - 您可以在您的机器上执行测试这里

function A(r, c, def) {
  var arr = [];
  for (var i = 0; i < r; i++) arr[i] = Array(c).fill(def);
  return arr;
}

function B(r, c, def) {
  var arr = new Array(r);
  for (var i = 0; i < arr.length; i++) arr[i] = new Array(c).fill(def);
  return arr;
}

function C(r, c, def) {
  var arr = Array(r);
  for (var i = 0; i < arr.length; i++) arr[i] = Array(c).fill(def);
  return arr;
}

function D(r, c, def) {
  // strange, but works
  var arr = [];
  for (var i = 0; i < r; i++) {
    arr.push([]);
    arr[i].push(Array(c));
  }
  for (var i = 0; i < r; i++) for (var j = 0; j < c; j++) arr[i][j]=def
  return arr;
}

function E(r, c, def) {
  let array = [[]];
  for (var x = 0; x < c; x++) {
    array[x] = [];
    for (var y = 0; y < r; y++) array[x][y] = def;
  }
  return array;
}

function F(r, c, def) {
  var makeArray = function(dims, arr) {
    if (dims[1] === undefined) {
      return Array(dims[0]).fill(def);
    }

    arr = Array(dims[0]);

    for (var i = 0; i < dims[0]; i++) {
      arr[i] = Array(dims[1]);
      arr[i] = makeArray(dims.slice(1), arr[i]);
    }

    return arr;
  }
  return makeArray([r, c]);
}

function G(r, c, def) {
  var a = [];
  while (a.push(Array(c).fill(def)) < r);
  return a;
}

function H(r,c, def) {
  function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args).fill(def);
    }

    return arr;
  }
  return createArray(r,c);
}

function I(r, c, def) {
  return [...Array(r)].map(x => Array(c).fill(def));
}

function J(r, c, def) {
  return Array(r).fill(0).map(() => Array(c).fill(def));
}

function K(r, c, def) {
  return Array.from(Array(r), () => Array(c).fill(def));
}

function L(r, c, def) {
  return Array.from({length: r}).map(e => Array(c).fill(def));
}

function M(r, c, def) {
  return Array.from({length: r}, () => Array.from({length: c}, () => def));
}

function N(r, c, def) {
  let arr={};
  for (var i = 0; i < r; i++) for (var j = 0; j < c; j++) arr[[i,j]]=def;
  return arr;
}



// -----------------------------------------------
// SHOW
// -----------------------------------------------

log = (t, f) => {
  let A = f(1000,1000,7); // create array with 1000 rows and 1000 columns, 
                          // each array cell initilised by 7
  A[800][900] = 5         // 800nd row and 901nd column set to 5
  console.log(`${t}[1][2]: ${A[1][2]}, ${t}[800][901]: ${A[800][900]}`);
}

log2 = (t, f) => {
  let A = f(1000,1000,7); // create array with 1000 rows and 1000 columns, 
                          // each array cell initilised by 7
  A[[800,900]] = 5            // 800nd row 900nd column set to 5
  console.log(`${t}[1][2]: ${A[[1,2]]}, ${t}[800][900]: ${A[[800,900]]}`);
}

log('A', A);
log('B', B);
log('C', C);
log('D', D);
log('E', E);
log('F', F);
log('G', G);
log('H', H);
log('I', I);
log('J', J);
log('K', K);
log('L', L);
log('M', M);
log2('N', N);
Run Code Online (Sandbox Code Playgroud)
This is presentation of solutions - not benchmark
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


小智 14

我不确定是否有人回答过此问题,但我发现这对我很有帮助 -

var array = [[,],[,]]
Run Code Online (Sandbox Code Playgroud)

例如:

var a = [[1,2],[3,4]]
Run Code Online (Sandbox Code Playgroud)

例如,对于二维数组.

  • 你不需要额外的逗号`var array = [[],[]]`就足够了. (3认同)

pri*_*ime 13

要在javaScript中创建2D数组,我们可以先创建一个Array,然后添加Arrays作为它的元素.此方法将返回具有给定行数和列数的2D数组.

function Create2DArray(rows,columns) {
   var x = new Array(rows);
   for (var i = 0; i < rows; i++) {
       x[i] = new Array(columns);
   }
   return x;
}
Run Code Online (Sandbox Code Playgroud)

创建数组使用此方法如下所示.

var array = Create2DArray(10,20);
Run Code Online (Sandbox Code Playgroud)

  • 请您在回答中添加一些解释性信息,说明它是如何工作的,以及它解决问题的原因.这将有助于将来找到此页面的其他人 (2认同)

Jus*_*hms 12

要创建一个非稀疏的"2D"数组(x,y),其中所有索引都是可寻址的,并且值设置为null:

let 2Darray = new Array(x).fill(null).map(item =>(new Array(y).fill(null))) 
Run Code Online (Sandbox Code Playgroud)

奖金"3D"数组(x,y,z)

let 3Darray = new Array(x).fill(null).map(item=>(new Array(y).fill(null)).map(item=>Array(z).fill(null)))
Run Code Online (Sandbox Code Playgroud)

关于这一点的变化和更正已经在评论中以及在回答这个问题的各个点上提到,但不作为实际答案,所以我在这里添加它.

应该注意的是(类似于大多数其他答案),这具有O(x*y)时间复杂度,因此它可能不适合非常大的阵列.


gue*_*est 12

要创建一个 4x6 数组,只需执行以下操作

const x = [...new Array(6)].map(elem => new Array(4))
Run Code Online (Sandbox Code Playgroud)

从一个空数组开始,而不是填充 w 个随机值通常是一个好习惯。(您通常将数组声明为const x = []1D,因此最好在 2D 中将 w 设为空。)


小智 11

Array(m).fill(v).map(() => Array(n).fill(v))
Run Code Online (Sandbox Code Playgroud)

可以创建一个2维阵列m x n与初始值mn可以是任意数字v可以是任何值stringnumberundefined

一种方法可以是 var a = [m][n]


Tim*_*ton 10

使用数组理解

在JavaScript 1.7及更高版本中,您可以使用数组解析来创建二维数组.您还可以在填充数组时过滤和/或操作条目,而不必使用循环.

var rows = [1, 2, 3];
var cols = ["a", "b", "c", "d"];

var grid = [ for (r of rows) [ for (c of cols) r+c ] ];

/* 
         grid = [
            ["1a","1b","1c","1d"],
            ["2a","2b","2c","2d"],
            ["3a","3b","3c","3d"]
         ]
*/
Run Code Online (Sandbox Code Playgroud)

您可以创建所需的任何n x m数组,并通过调用使用默认值填充它

var default = 0;  // your 2d array will be filled with this value
var n_dim = 2;
var m_dim = 7; 

var arr = [ for (n of Array(n_dim)) [ for (m of Array(m_dim) default ]] 
/* 
         arr = [
            [0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0],
         ]
*/
Run Code Online (Sandbox Code Playgroud)

可以在此处找到更多示例和文档.

请注意,这不是标准功能.


dev*_*oki 10

以下示例定义了一个名为activities的二维数组:

\n
    let activities = [\n        ['Work', 9],\n        ['Eat', 1],\n        ['Commute', 2],\n        ['Play Game', 1],\n        ['Sleep', 7]\n    ];\n
Run Code Online (Sandbox Code Playgroud)\n

在活动数组中,第一个维度表示活动,第二个维度显示每个维度每天花费的小时数。

\n

要在控制台中显示活动数组,请使用 console.table() 方法,如下所示:

\n
console.table(activities);\n
Run Code Online (Sandbox Code Playgroud)\n

下图说明了输出:

\n
\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82      0      \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82    0    \xe2\x94\x82   'Work'    \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82    1    \xe2\x94\x82    'Eat'    \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82    2    \xe2\x94\x82  'Commute'  \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82    3    \xe2\x94\x82 'Play Game' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82    4    \xe2\x94\x82   'Sleep'   \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n
\n

请注意,该(index)列用于指示内部数组的索引的说明。

\n

要访问多维数组的元素,首先使用方括号访问返回内部数组的外部数组的元素;然后使用另一个方括号访问内部数组的元素。

\n

以下示例返回上面的活动数组中第一个内部数组的第二个元素:

\n
console.log(activities[0][1]); // 9\n
Run Code Online (Sandbox Code Playgroud)\n

向 JavaScript 多维数组添加元素

\n

您可以使用 Array 方法(例如push()和 )splice()来操作多维数组的元素。

\n

例如,要在多维数组的末尾添加新元素,请使用push()以下方法:

\n
activities.push(['Study',2]);\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82      0      \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82    0    \xe2\x94\x82   'Work'    \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82    1    \xe2\x94\x82    'Eat'    \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82    2    \xe2\x94\x82  'Commute'  \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82    3    \xe2\x94\x82 'Play Game' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82    4    \xe2\x94\x82   'Sleep'   \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x82    5    \xe2\x94\x82   'Study'   \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n
\n

要在数组中间插入元素,可以使用该splice()方法。下面在活动数组的第二个位置插入一个元素:

\n
activities.splice(1, 0, ['Programming', 2]);\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82       0       \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82    0    \xe2\x94\x82    'Work'     \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82    1    \xe2\x94\x82 'Programming' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82    2    \xe2\x94\x82     'Eat'     \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82    3    \xe2\x94\x82   'Commute'   \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82    4    \xe2\x94\x82  'Play Game'  \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82    5    \xe2\x94\x82    'Sleep'    \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x82    6    \xe2\x94\x82    'Study'    \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n
\n

此示例计算每项活动所花费的小时数百分比,并将该百分比附加到内部数组。

\n
activities.forEach(activity => {\n    let percentage = ((activity[1] / 24) * 100).toFixed();\n    activity[2] = percentage + '%';\n});\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82       0       \xe2\x94\x82 1 \xe2\x94\x82   2   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82    0    \xe2\x94\x82    'Work'     \xe2\x94\x82 9 \xe2\x94\x82 '38%' \xe2\x94\x82\n\xe2\x94\x82    1    \xe2\x94\x82 'Programming' \xe2\x94\x82 2 \xe2\x94\x82 '8%'  \xe2\x94\x82\n\xe2\x94\x82    2    \xe2\x94\x82     'Eat'     \xe2\x94\x82 1 \xe2\x94\x82 '4%'  \xe2\x94\x82\n\xe2\x94\x82    3    \xe2\x94\x82   'Commute'   \xe2\x94\x82 2 \xe2\x94\x82 '8%'  \xe2\x94\x82\n\xe2\x94\x82    4    \xe2\x94\x82  'Play Game'  \xe2\x94\x82 1 \xe2\x94\x82 '4%'  \xe2\x94\x82\n\xe2\x94\x82    5    \xe2\x94\x82    'Sleep'    \xe2\x94\x82 7 \xe2\x94\x82 '29%' \xe2\x94\x82\n\xe2\x94\x82    6    \xe2\x94\x82    'Study'    \xe2\x94\x82 2 \xe2\x94\x82 '8%'  \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n
\n

从 JavaScript 多维数组中删除元素

\n

要从数组中删除元素,可以使用pop()orsplice()方法。

\n

例如,以下语句删除活动数组的最后一个元素:

\n
activities.pop();\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82       0       \xe2\x94\x82 1 \xe2\x94\x82   2   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82    0    \xe2\x94\x82    'Work'     \xe2\x94\x82 9 \xe2\x94\x82 '38%' \xe2\x94\x82\n\xe2\x94\x82    1    \xe2\x94\x82 'Programming' \xe2\x94\x82 2 \xe2\x94\x82 '8%'  \xe2\x94\x82\n\xe2\x94\x82    2    \xe2\x94\x82     'Eat'     \xe2\x94\x82 1 \xe2\x94\x82 '4%'  \xe2\x94\x82\n\xe2\x94\x82    3    \xe2\x94\x82   'Commute'   \xe2\x94\x82 2 \xe2\x94\x82 '8%'  \xe2\x94\x82\n\xe2\x94\x82    4    \xe2\x94\x82  'Play Game'  \xe2\x94\x82 1 \xe2\x94\x82 '4%'  \xe2\x94\x82\n\xe2\x94\x82    5    \xe2\x94\x82    'Sleep'    \xe2\x94\x82 7 \xe2\x94\x82 '29%' \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n
\n

同样,可以使用pop()方法从多维数组的内部数组中删除元素。以下示例从活动数组的内部数组中删除百分比元素。

\n
activities.forEach((activity) => {\n    activity.pop(2);\n});\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82       0       \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82    0    \xe2\x94\x82    'Work'     \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82    1    \xe2\x94\x82 'Programming' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82    2    \xe2\x94\x82     'Eat'     \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82    3    \xe2\x94\x82   'Commute'   \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82    4    \xe2\x94\x82  'Play Game'  \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82    5    \xe2\x94\x82    'Sleep'    \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n
\n

迭代 JavaScript 多维数组的元素

\n

要迭代多维数组,请使用嵌套for循环,如下例所示。

\n
// loop the outer array\n\nfor (let i = 0; i < activities.length; i++) {\n    // get the size of the inner array\n    var innerArrayLength = activities[i].length;\n    // loop the inner array\n    for (let j = 0; j < innerArrayLength; j++) {\n        console.log('[' + i + ',' + j + '] = ' + activities[i][j]);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

第一个循环迭代外部数组的元素,嵌套循环迭代内部数组的元素。

\n

下面显示了控制台中脚本的输出:

\n
\n
[0,0] = Work\n[0,1] = 9\n[1,0] = Eat\n[1,1] = 1\n[2,0] = Commute\n[2,1] = 2\n[3,0] = Play Game\n[3,1] = 1\n[4,0] = Sleep\n[4,1] = 7\n[5,0] = Study\n[5,1] = 2\n
Run Code Online (Sandbox Code Playgroud)\n
\n

或者您可以使用该forEach()方法两次:

\n
activities.forEach((activity) => {\n    activity.forEach((data) => {\n        console.log(data);\n    });\n});\n
Run Code Online (Sandbox Code Playgroud)\n
\n
Work\n9\nEat\n1\nCommute\n2\nPlay Game\n1\nSleep\n7\nStudy\n2\n
Run Code Online (Sandbox Code Playgroud)\n
\n

  • 无耻地复制和粘贴来自 https://www.javascripttutorial.net/javascript-multiDimension-array/ (3认同)

Ale*_*der 8

我的方法与@Bineesh的答案非常相似,但采用了更为通用的方法.

您可以按如下方式声明double数组:

var myDoubleArray = [[]];
Run Code Online (Sandbox Code Playgroud)

并以下列方式存储和访问内容:

var testArray1 = [9,8]
var testArray2 = [3,5,7,9,10]
var testArray3 = {"test":123}
var index = 0;

myDoubleArray[index++] = testArray1;
myDoubleArray[index++] = testArray2;
myDoubleArray[index++] = testArray3;

console.log(myDoubleArray[0],myDoubleArray[1][3], myDoubleArray[2]['test'],) 
Run Code Online (Sandbox Code Playgroud)

这将打印预期的输出

[ 9, 8 ] 9 123
Run Code Online (Sandbox Code Playgroud)


my-*_*my- 8

对于一个班轮爱好者Array.from()

// creates 8x8 array filed with "0"    
const arr2d = Array.from({ length: 8 }, () => Array.from({ length: 8 }, () => "0"));
Run Code Online (Sandbox Code Playgroud)

另一个(来自dmitry_romanov的评论)使用Array().fill()

// creates 8x8 array filed with "0"    
const arr2d = Array(8).fill(0).map(() => Array(8).fill("0"));
Run Code Online (Sandbox Code Playgroud)

  • 我们可以在第一个`fill()`函数中删除`0`:`const arr2d = Array(8).fill().map(()=> Array(8).fill("0"));` (2认同)

Sri*_*tha 8

只有在运行时才知道数组的大小,然后可以使用以下方法创建动态二维数组

    var num = '123456';
    var row = 3; // Known at run time
    var col = 2; // Known at run time
    var i = 0;
    
    var array2D = [[]];
    for(var r = 0; r < row; ++r)
    {
        array2D[r] = [];
        for(var c = 0; c < col; ++c)
        {
            array2D[r][c] = num[i++];
        }
    }
    console.log(array2D); 
    // [[ '1', '2' ], 
    //  [ '3', '4' ], 
    //  [ '5', '6' ]]
    
    console.log(array2D[2][1]); // 6
Run Code Online (Sandbox Code Playgroud)


GMs*_*soF 6

我发现下面是最简单的方法:

var array1 = [[]];   
array1[0][100] = 5; 

alert(array1[0][100]);
alert(array1.length);
alert(array1[0].length);
Run Code Online (Sandbox Code Playgroud)


Ric*_*ick 6

Javascript不支持二维数组,相反,我们将一个数组存储在另一个数组中,然后根据要访问该数组的位置从该数组中获取数据。请记住,数组计算从ZERO开始。

代码示例:

/* Two dimensional array that's 5 x 5 

       C0 C1 C2 C3 C4 
    R0[1][1][1][1][1] 
    R1[1][1][1][1][1] 
    R2[1][1][1][1][1] 
    R3[1][1][1][1][1] 
    R4[1][1][1][1][1] 
*/

var row0 = [1,1,1,1,1],
    row1 = [1,1,1,1,1],
    row2 = [1,1,1,1,1],
    row3 = [1,1,1,1,1],
    row4 = [1,1,1,1,1];

var table = [row0,row1,row2,row3,row4];
console.log(table[0][0]); // Get the first item in the array
Run Code Online (Sandbox Code Playgroud)


Ins*_*dJW 6

ES6+、ES2015+ 可以用更简单的方式做到这一点


创建 3 x 2 数组,填充为 true

[...Array(3)].map(item => Array(2).fill(true))
Run Code Online (Sandbox Code Playgroud)


CJ *_*des 5

我必须制作一个灵活的数组函数,以便根据需要向其中添加“记录”,并能够对其进行更新并进行所需的任何计算,然后再将其发送到数据库进行进一步处理。这是代码,希望对您有所帮助:)。

function Add2List(clmn1, clmn2, clmn3) {
    aColumns.push(clmn1,clmn2,clmn3); // Creates array with "record"
    aLine.splice(aPos, 0,aColumns);  // Inserts new "record" at position aPos in main array
    aColumns = [];    // Resets temporary array
    aPos++ // Increments position not to overlap previous "records"
}
Run Code Online (Sandbox Code Playgroud)

随时优化和/或指出任何错误:)


dim*_*uel 5

我发现这是制作二维数组的一种快速方法。

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(e => Array(y));
}
Run Code Online (Sandbox Code Playgroud)

您也可以轻松地将此功能转换为ES5功能。

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(function(e) {
        return Array(y);
    });
}
Run Code Online (Sandbox Code Playgroud)

为何起作用:new Array(n)构造函数创建一个具有原型Array.prototype的对象,然后分配该对象的length,从而导致未填充的数组。由于缺少实际成员,因此我们无法在其Array.prototype.map上运行该功能。

但是,当您向构造函数提供多个参数时(例如,当您提供时)Array(1, 2, 3, 4),构造函数将使用该对象正确arguments实例化并填充一个Array对象。

因此,我们可以使用Array.apply(null, Array(x)),因为该apply函数会将参数传播到构造函数中。为了澄清起见,做Array.apply(null, Array(3))等同于做Array(null, null, null)

现在我们已经创建了一个实际的填充数组,我们所需要做的就是调用map并创建第二层(y)。


小智 5

在下方,创建一个5x5矩阵,并用 null

var md = [];
for(var i=0; i<5; i++) {
    md.push(new Array(5).fill(null));
}

console.log(md);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是错误的。它将创建一个阵列,并在其插槽中填充相同的阵列。md [1] [0] = 3`并且所有其他元素也被更新 (3认同)

小智 5

一个用于创建填充为 0 的 am*n 二维数组的衬垫。

new Array(m).fill(new Array(n).fill(0));
Run Code Online (Sandbox Code Playgroud)

  • 是的,我确认了这个问题。快速修复:`a = Array(m).fill(0).map(() =&gt; Array(n).fill(0))`?`map` 将解开引用并为每个插槽创建唯一的数组。 (7认同)
  • 实际上,这只会创建两个数组。每个索引中的第二维将是相同的数组。 (3认同)

ant*_*ove 5

var playList = [
  ['I Did It My Way', 'Frank Sinatra'],
  ['Respect', 'Aretha Franklin'],
  ['Imagine', 'John Lennon'],
  ['Born to Run', 'Bruce Springsteen'],
  ['Louie Louie', 'The Kingsmen'],
  ['Maybellene', 'Chuck Berry']
];

function print(message) {
  document.write(message);
}

function printSongs( songs ) {
  var listHTML;
  listHTML = '<ol>';
  for ( var i = 0; i < songs.length; i += 1) {
    listHTML += '<li>' + songs[i][0] + ' by ' + songs[i][1] + '</li>';
  }
  listHTML += '</ol>';
  print(listHTML);
}

printSongs(playList);
Run Code Online (Sandbox Code Playgroud)


Oli*_*Oli 5

还有另一种解决方案,它不会强制您预先定义二维数组的大小,而且非常简洁。

var table = {}
table[[1,2]] = 3 // Notice the double [[ and ]]
console.log(table[[1,2]]) // -> 3
Run Code Online (Sandbox Code Playgroud)

这样做是因为,[1,2]转化为一个字符串,作为字符串键table对象。