Tableau multidimensionnel JavaScript

est-ce que quelqu'un peut me donner un exemple/exemple de JavaScript avec un tableau multidimensionnel d'entrées? J'espère que vous pourriez m'aider parce que je suis encore nouveau dans le JavaScript.

comme quand vous entrez 2 lignes et 2 colonnes la sortie de celui-ci sera 2 lignes d'entrée et 2 colonnes d'entrée.

comme ceci:

[input][input]                
[input][input]
130
demandé sur pimvdb 2011-09-25 17:01:18

13 réponses

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/

et si vous voulez stocker des éléments 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';

pas vraiment sûr à quel point ce qui précède est utile jusqu'à ce que vous attachez les éléments. Ce qui suit est peut-être plus ce que vous cherchez:

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

ou, peut-être ceci:

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

qui donne:

[2, 0]

dans la console. Si vous voulez sortir cela au texte, vous pouvez result.join(' '); , qui vous donnerait 2 0 .

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

MODIFIER

et une démonstration de travail:

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

286
répondu Jared Farrish 2017-11-29 01:36:21

citation tirée de Structures de données et algorithmes avec JavaScript

Les Bonnes Parties (O'Reilly, p. 64). Crockford étend le JavaScript objet de tableau avec une fonction qui définit le nombre de lignes et de colonnes et définit chaque valeur à une valeur passée à la fonction. Ici, c'est sa définition:

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

voici un code pour tester la définition:

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"

nous pouvons aussi créer un tableau bidimensionnel et l'initialiser à un ensemble de valeurs dans une ligne:

var grades = [[89, 77, 78],[76, 82, 81],[91, 94, 89]];
print(grades[2][2]); // displays 89
24
répondu Teoman shipahi 2016-02-04 20:31:51

déclaré sans assignation de valeur.

2 dimensions...

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

3 dimensions...

var arrayName = new Array(new Array(new Array()));
15
répondu ShawnS 2012-10-28 05:13:03

je sais que c'est ancien, mais ce sujet...

4x4 exemple (actually 4x<anything>) :

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

qui peut être rempli par:

for (var i=0; i<4; i++) {
   for (var j=0; j<4; j++) {
      matrix[i][j] = i*j;
   }
}
11
répondu Nadav 2015-01-07 22:31:22

très simple

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';
8
répondu user4839072 2015-04-27 21:41:01
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";
5
répondu Ken Jinks 2014-04-04 14:22:48

J'espère que le code suivant convient à vos besoins

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;
 }
}
5
répondu Nishanth Suresh 2014-11-20 16:49:26
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();
    }

augmente la var de taille après votre fonction.

4
répondu Gaurav 2013-02-23 06:43:50

vous pouvez créer le tableau suivre le code ci-dessous:

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

résultat:

[v1] [v2] position 0

[v3] [v4] position 1

[v5] [v6] position 2

pour ajouter au tableau dinamically, utilisez la méthode ci-dessous:

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

Espérons que cette aide. :)

2
répondu b1c10 2014-08-27 20:09:45

alors voici ma solution.

un exemple simple pour un tableau 3x3. Vous pouvez enchaîner ceci pour aller plus loin

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

ou la fonction suivante générera n'importe quel niveau de profondeur que vous aimez

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/

1
répondu BinaryOverdose 2017-02-08 10:46:57

j'ai créé un module npm pour le faire avec un peu plus de flexibilité:

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

vous pouvez également initialiser les positions avec n'importe quelle valeur:

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

ou plus avancé:

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

Get et set de valeurs en position:

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

// set value
threedimensional.position([2, 2, 2], 'New Value')
0
répondu Arjun Mehta 2016-12-30 19:13:31

j'ai écrit un linéaire:

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

je sens cependant que je peux passer plus de temps à faire une version JSON.parse(JSON.stringify()) - libre qui est utilisé pour Clonage ici.

Btw, jetez un oeil à mon autre réponse ici .

0
répondu Ebrahim Byagowi 2017-12-28 19:27:45

je sais que c'est une vieille question Mais voici quelque chose à essayer: Faites votre tableau multidimensionnel, et placez-le dans une balise html. De cette façon, vous pouvez cibler précisément votre tableau entrée:

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

C'est tout simplement une façon plus nette d'écrire votre code et plus facile à invoquer. Vous pouvez consulter ma démo ici!

0
répondu Gareth Compton 2018-08-18 13:47:50