如何创建多维数组

159

有人能给我一个JavaScript多维输入数组的示例吗?希望你能帮助,因为我对JavaScript还很陌生。

比如当您输入2行2列时,它的输出将是2行输入和2列输入。

像这样:

[input][input]                
[input][input]

2
“inputs”是什么意思?是指<input>元素还是一些变量? - pimvdb
1
是的先生.. 一个 <input type = "text"> - SpitFire
对于那些想要创建任意大小和维度数量的多维数组的人,请查看这个答案 - Pimp Trizkit
15个回答

336
var numeric = [
    ['input1','input2'],
    ['input3','input4']
];
numeric[0][0] == 'input1';
numeric[0][1] == 'input2';
numeric[1][0] == 'input3';
numeric[1][1] == 'input4';

var obj = {
    'row1' : {
        'key1' : 'input1',
        'key2' : 'input2'
    },
    'row2' : {
        'key3' : 'input3',
        'key4' : 'input4'
    }
};
obj.row1.key1 == 'input1';
obj.row1.key2 == 'input2';
obj.row2.key1 == 'input3';
obj.row2.key2 == 'input4';

var mixed = {
    'row1' : ['input1', 'inpu2'],
    'row2' : ['input3', 'input4']
};
mixed.row1[0] == 'input1';
mixed.row1[1] == 'input2';
mixed.row2[0] == 'input3';
mixed.row2[1] == 'input4';

http://jsfiddle.net/z4Un3/

如果你想要存储DOM元素:

var inputs = [
    [
        document.createElement('input'),
        document.createElement('input')
    ],
    [
        document.createElement('input'),
        document.createElement('input')
    ]
];
inputs[0][0].id = 'input1';
inputs[0][1].id = 'input2';
inputs[1][0].id = 'input3';
inputs[1][1].id = 'input4';

不太确定在附加元素之前上述内容有多少用处。下面的内容可能更符合你的要求:

<input text="text" id="input5"/>
<input text="text" id="input6"/>
<input text="text" id="input7"/>
<input text="text" id="input8"/>    
var els = [
    [
        document.getElementById('input5'),
        document.getElementById('input6')
    ],
    [
        document.getElementById('input7'),
        document.getElementById('input8')
    ]
];    
els[0][0].id = 'input5';
els[0][1].id = 'input6';
els[1][0].id = 'input7';
els[1][1].id = 'input8';

http://jsfiddle.net/z4Un3/3/

或者,也许是这个:

<input text="text" value="4" id="input5"/>
<input text="text" value="4" id="input6"/>
<br/>
<input text="text" value="2" id="input7"/>
<input text="text" value="4" id="input8"/>

var els = [
    [
        document.getElementById('input5'),
        document.getElementById('input6')
    ],
    [
        document.getElementById('input7'),
        document.getElementById('input8')
    ]
];

var result = [];

for (var i = 0; i < els.length; i++) {
    result[result.length] = els[0][i].value - els[1][i].value;
}

这将会得到:

[2, 0]
在控制台中。如果要将其输出为文本,可以使用 result.join(' '),这将给出 2 0http://jsfiddle.net/z4Un3/6/ 编辑 以下是可工作的演示:
<input text="text" value="4" id="input5"/>
<input text="text" value="4" id="input6"/>
<br/>
<input text="text" value="2" id="input7"/>
<input text="text" value="4" id="input8"/>
<br/>
<input type="button" value="Add" onclick="add()"/>

// This would just go in a script block in the head
function add() {
    var els = [
        [
            document.getElementById('input5'),
            document.getElementById('input6')
        ],
        [
            document.getElementById('input7'),
            document.getElementById('input8')
        ]
    ];

    var result = [];

    for (var i = 0; i < els.length; i++) {
        result[result.length] = parseInt(els[0][i].value) - parseInt(els[1][i].value);
    }

    alert(result.join(' '));
}

http://jsfiddle.net/z4Un3/8/


1
请问这个是如何工作的,先生?我对JavaScript有点困惑。 - SpitFire
1
你对什么感到困惑? - Jared Farrish
1
我不是很明白你在说什么。你想用数组做什么?(另外,请看我的最后一次编辑。) - Jared Farrish
不错的回答,但我能理解提问者的立场。这是一份高级答案,适合那些还没有理解JS的人去欣赏上面提供的内容。 - user66001
@JaredFarrish 如果我说错了,请纠正我,但是如果您使用obj语法或混合语法,仍然可以使用obj['Value']var ValueVariable ='Value'; obj[ValueVariable]而不是obj.Value来获取或设置值。对吗? - Dan
显示剩余4条评论

30

引用自《JavaScript数据结构与算法》(Data Structures and Algorithms with JavaScript)

摘自《JavaScript语言精粹》(O'Reilly)第64页。Crockford通过一个函数扩展了JavaScript数组对象,该函数设置行数和列数,并将每个值设置为传递给函数的值。以下是他的定义:

Array.matrix = function(numrows, numcols, initial) {
    var arr = [];
    for (var i = 0; i < numrows; ++i) {
        var columns = [];
        for (var j = 0; j < numcols; ++j) {
            columns[j] = initial;
        }
        arr[i] = columns;
    }
    return arr;
}

以下是一些测试该定义的代码:

var nums = Array.matrix(5,5,0);
print(nums[1][1]); // displays 0
var names = Array.matrix(3,3,"");
names[1][2] = "Joe";
print(names[1][2]); // display "Joe"

我们也可以创建一个二维数组并在一行中将其初始化为一组值:

var grades = [[89, 77, 78],[76, 82, 81],[91, 94, 89]];
print(grades[2][2]); // displays 89

17

声明时没有赋值。

2个维度...

var arrayName = new Array(new Array());

三个维度...

var arrayName = new Array(new Array(new Array()));

8
这两个例子似乎只能生成1x1和1x1x1数组(分别),可能称为单层嵌套数组。例如,var test=new Array(new Array());test[0][0]='1';test[0][1]='2';test[1][0]='3';会出现错误信息Exception: test[1] is undefined - user66001
2
这似乎是错误的。当我尝试运行代码时,我得到了一个1x1x0数组。http://jsfiddle.net/zU8SB/1/ 它是如何获得13个赞的? - Randall Cook
1
使用 'Array.push' 进行插入。 - bagz_man

14

我知道这很古老,但是关于...

4x4例子(实际上是4x<任何东西>):

var matrix = [ [],[],[],[] ]

可以填写的内容包括:

for (var i=0; i<4; i++) {
   for (var j=0; j<4; j++) {
      matrix[i][j] = i*j;
   }
}

也许更明显的是,这个变量声明中没有声明(即无法访问)1x4之外的任何内容(因此不包括矩阵[3][3]作为第四行第四列)。此外,将元素[0][1]设置为5的示例跳过了第一个元素。在很多编程语言中,使用[0][0]可能更有用,以展示数组的一个重要点。 - user66001

9
希望以下代码符合您的要求。
var row= 20;
var column= 10;
var f = new Array();

for (i=0;i<row;i++) {
 f[i]=new Array();
 for (j=0;j<column;j++) {
  f[i][j]=0;
 }
}

是的!!我已经为此苦苦挣扎很久了!秘诀就是在行列(或者如果遍历网格,则是高度)处创建额外的数组。 - NiCk Newman

8
非常简单。
var states = [,];
states[0,0] = tName; 
states[0,1] = '1';
states[1,0] = tName; 
states[2,1] = '1';

. . .

states[n,0] = tName; 
states[n,1] = '1';

1
当我在控制台中测试时,这似乎不起作用。当我写入a [0,1]和a [1,1]时,旧值似乎被删除了,第二个会删除a [0,1]... - Thomas Dignan

8
function Array2D(x, y)
{
    var array2D = new Array(x);

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

    return array2D;
}

var myNewArray = Array2D(4, 9);

myNewArray[3][5] = "booger";

4
var size = 0;   
 var darray = new Array();
    function createTable(){
        darray[size] = new Array();
        darray[size][0] = $("#chqdate").val();
        darray[size][1]= $("#chqNo").val();
        darray[size][2] = $("#chqNarration").val() ;
        darray[size][3]= $("#chqAmount").val();
        darray[size][4]= $("#chqMode").val();
    }

在函数后增加变量的大小。


4
所以这是我的解决方案。
一个简单的3x3数组示例。您可以继续链接以深入了解。
Array(3).fill().map(a => Array(3))

或者以下函数会生成您所喜欢的任何深度级别。
f = arr => {
    let str = 'return ', l = arr.length;
    arr.forEach((v, i) => {
        str += i < l-1 ? `Array(${v}).fill().map(a => ` : `Array(${v}` + ')'.repeat(l);
    });
    return Function(str)();
}
f([4,5,6]) // Generates a 4x5x6 Array

http://www.binaryoverdose.com/2017/02/07/Generating-Multidimensional-Arrays-in-JavaScript/


2
您可以按照以下代码创建数组:

var arraymultidimensional = []
    arraymultidimensional = [[value1,value2],[value3,value4],[value5,value6]];

结果:
[v1][v2] 位置 0
[v3][v4] 位置 1
[v5][v6] 位置 2

要动态添加到数组中,请使用以下方法:

//vectorvalue format = "[value,value,...]"
function addToArray(vectorvalue){
  arraymultidimensional[arraymultidimensional.length] = vectorvalue;
}

希望这可以帮到你。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接