Cách tạo mảng đa chiều


148

Bất cứ ai cũng có thể cho tôi một ví dụ / ví dụ về JavaScript với một loạt các đầu vào đa chiều không? Hy vọng bạn có thể giúp vì tôi vẫn chưa quen với JavaScript.

Giống như khi bạn nhập 2 hàng và 2 cột, đầu ra của nó sẽ là 2 hàng đầu vào và 2 cột đầu vào.

Như thế này:

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

2
Bạn có ý nghĩa gì với 'đầu vào'? Một <input>yếu tố hay chỉ là một số biến?
pimvdb

1
vâng thưa ngài .. một <input type = "text">
SpitFire

Đối với những người muốn tạo ra các mảng nhiều chiều với kích thước và số lượng kích thước tùy ý, hãy kiểm tra câu trả lời này .
Pimp Trizkit

Câu trả lời:


318
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/

Và nếu bạn muốn lưu trữ các phần tử 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';

Không thực sự chắc chắn làm thế nào hữu ích ở trên cho đến khi bạn đính kèm các yếu tố. Dưới đây có thể là nhiều hơn những gì bạn đang tìm kiếm:

<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/

Hoặc, có thể đây:

<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;
}

Cung cấp cho:

[2, 0]

Trong bảng điều khiển. Nếu bạn muốn xuất nó thành văn bản, bạn có thể result.join(' ');, nó sẽ cung cấp cho bạn 2 0.

http://jsfiddle.net/z4Un3/6/

BIÊN TẬP

Và một cuộc biểu tình làm việc:

<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
Tôi có thể biết nó hoạt động như thế nào không thưa ông .. tôi hơi nhầm lẫn về Javascript
SpitFire

1
Bạn đang bối rối về điều gì?
Jared Farrish

về việc nó giống như tôi sẽ tạo một tệp HTML trong đó có hai đầu vào và đó là đầu vào của Hàng và Cột hay cái gì khác?
SpitFire

1
Tôi không thực sự làm theo những gì bạn đang nói. Bạn đang cố gắng làm gì với mảng của bạn? (Ngoài ra, hãy xem bản chỉnh sửa cuối cùng của tôi.)
Jared Farrish

trong mảng tôi sẽ nhập một số hàng và cột có tên hoặc ID duy nhất..và các hàng và cột khác có tên hoặc ID duy nhất trong đó mảng đầu tiên của hàng và cột đầu vào sẽ được trừ vào đầu vào thứ 2 của R và C ..
SpitFire

28

Trích dẫn từ Cấu trúc dữ liệu và thuật toán với JavaScript

Các bộ phận tốt (O'Reilly, trang 64). Crockford mở rộng đối tượng mảng JavaScript bằng một hàm đặt số lượng hàng và cột và đặt từng giá trị thành một giá trị được truyền cho hàm. Đây là định nghĩa của anh ấy:

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;
}

Dưới đây là một số mã để kiểm tra định nghĩa:

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"

Chúng ta cũng có thể tạo một mảng hai chiều và khởi tạo nó thành một tập hợp các giá trị trong một dòng:

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

15

Khai báo mà không gán giá trị.

2 chiều ...

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

3 chiều ...

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

8
Cả hai ví dụ này dường như chỉ tạo ra các mảng 1x1 & 1x1x1 (tương ứng), có thể được gọi đúng là các mảng lồng nhau một chiều. Như một ví dụ var test=new Array(new Array());test[0][0]='1';test[0][1]='2';test[1][0]='3';lỗi với thông báoException: test[1] is undefined
user66001

2
Điều này có vẻ sai. Khi tôi thử mã tôi nhận được một mảng 1x1x0. jsfiddle.net/zU8SB/1 Làm thế nào nó nhận được 13 upvote?
Randall Cook

1
Chèn bằng 'Array.push'
bagz_man

12

Tôi biết điều này là cổ xưa nhưng những gì về ...

Ví dụ 4 x 4 (actually 4x<anything>):

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

có thể điền vào:

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

Có lẽ có thể làm rõ hơn rằng không có gì "bên ngoài" 1x4 (vì vậy không phải ma trận [3] [3] là hàng thứ 4, cột thứ 4) được khai báo (nghĩa là có thể truy cập được) với khai báo var này. Ngoài ra, phần tử cài đặt ví dụ [0] [1] đến 5 bỏ qua phần tử đầu tiên. Thay vào đó, sử dụng [0] [0], có thể hữu ích để chứng minh một điểm quan trọng của mảng trong nhiều ngôn ngữ lập trình.
dùng66001

9

rất đơn giản

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';

Điều này dường như không hoạt động khi tôi kiểm tra nó trong giao diện điều khiển. Dường như các giá trị cũ bị xóa khi tôi viết để nói [0,1] và [1,1], lần thứ hai xó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";

7

Hy vọng mã sau đây phù hợp với yêu cầu của bạn

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;
 }
}

ĐÚNG!! Đã phải vật lộn với điều này mãi mãi! Bí mật là tạo ra mảng bổ sung ở cột hàng (hoặc nếu lặp qua lưới, chiều cao)
NiCk Newman

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();
    }

tăng kích thước var sau chức năng của bạn.


3

Vì vậy, đây là giải pháp của tôi.

Một ví dụ đơn giản cho Mảng 3x3. Bạn có thể tiếp tục xâu chuỗi này để đi sâu hơn

Array(3).fill().map(a => Array(3))

Hoặc các chức năng sau đây sẽ tạo ra bất kỳ cấp độ sâu nào bạn muốn

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

bạn có thể tạo mảng theo mã dưới đây:

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

Kết quả:
[v1] [v2] vị trí 0
[v3] [v4] vị trí 1
[v5] [v6] vị trí 2

Để thêm vào mảng một cách ngẫu nhiên, sử dụng phương pháp dưới đây:

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

Hi vọng điêu nay co ich. :)


1

Tôi đã tạo một mô-đun npm để thực hiện điều này với một số tính linh hoạt được thêm vào:

// create a 3x3 array
var twodimensional = new MultiDimensional([3, 3])

// create a 3x3x4 array
var threedimensional = new MultiDimensional([3, 3, 4])

// create a 4x3x4x2 array
var fourdimensional = new MultiDimensional([4, 3, 4, 2])

// etc...

Bạn cũng có thể khởi tạo các vị trí với bất kỳ giá trị nào:

// create a 3x4 array with all positions set to 0
var twodimensional = new MultiDimensional([3, 4], 0)

// create a 3x3x4 array with all positions set to 'Default String'
var threedimensionalAsStrings = new MultiDimensional([3, 3, 4], 'Default String')

Hoặc nâng cao hơn:

// create a 3x3x4 array with all positions set to a unique self-aware objects.
var threedimensional = new MultiDimensional([3, 3, 4], function(position, multidimensional) {
    return {
        mydescription: 'I am a cell at position ' + position.join(),
        myposition: position,
        myparent: multidimensional
    }
})

Nhận và đặt giá trị tại các vị trí:

// get value
threedimensional.position([2, 2, 2])

// set value
threedimensional.position([2, 2, 2], 'New Value')

0

Tôi đã viết một tuyến tính cho việc này:

[1, 3, 1, 4, 1].reduceRight((x, y) => new Array(y).fill().map(() => JSON.parse(JSON.stringify(x))), 0);

Tôi cảm thấy tuy nhiên tôi có thể dành nhiều thời gian hơn để tạo ra một JSON.parse(JSON.stringify())phiên bản miễn phí được sử dụng để nhân bản ở đây.

Btw, hãy xem câu trả lời khác của tôi ở đây .


0

Tôi biết đây là một câu hỏi cũ nhưng đây là một điều cần thử: Tạo mảng đa chiều của bạn và đặt nó vào trong một thẻ html. Bằng cách này, bạn có thể nhắm mục tiêu chính xác đầu vào mảng của mình:

//Your Holding tag for your inputs!
<div id='input-container' class='funky'></div>

<script>
    //With VAR: you can seperate each variable with a comma instead of:
    //creating var at the beginning and a semicolon at the end.
    //Creates a cleaner layout of your variables
    var
        arr=[['input1-1','input1-2'],['input2-1','input2-2']],
        //globall calls these letters var so you dont have to recreate variable below
        i,j
    ;

    //Instead of the general 'i<array.length' you can go even further
    //by creating array[i] in place of 'i<array.length'
    for(i=0;arr[i];i++){
    for(j=0;arr[i][j];j++){
        document.getElementById('input-container').innerHTML+=
            "<input class='inner-funky'>"+arr[i][j]+"</input>"
        ;
    }}
</script>

Nó chỉ đơn giản là một cách gọn gàng hơn để viết mã của bạn và dễ dàng hơn để gọi. Bạn có thể kiểm tra bản demo của tôi ở đây!


bạn có thể mạnh dạn hơn bằng cách thực hiện document.querySelectorAll();để có được các lớp, id và thậm chí các phần tử!
Gareth Compton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.