Çok boyutlu dizi oluşturma


148

Herkes bana çok boyutlu bir girdi dizisi içeren bir JavaScript örneği / örneği verebilir mi? Umarım yardımcı olabilirsiniz çünkü hala JavaScript'te yeniyim.

2 satır ve 2 sütun girdiğinizde bunun çıktısı 2 satır giriş ve 2 sütun giriş olacaktır.

Bunun gibi:

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

2
'Girdiler' ile ne demek istiyorsun? Bir <input>eleman mı yoksa sadece bir değişken mi?
pimvdb

1
evet efendim .. bir <giriş türü = "metin">
SpitFire

Rasgele boyutlara ve boyut sayısına sahip çok boyutlu diziler yapmak isteyenler için bu yanıtı kontrol edin .
Pezevenk Trizkit

Yanıtlar:


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/

Ve DOM öğelerini saklamak istiyorsanız:

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

Öğeleri ekleyene kadar yukarıdakilerin ne kadar yararlı olduğundan emin değilim. Aşağıdakiler aradığınız şeyden daha fazlası olabilir:

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

Veya, belki de bu:

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

Hangi verir:

[2, 0]

Konsolda. O metne çıkışına isterseniz yapabilirsiniz result.join(' ');, size hangi 2 0.

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

DÜZENLE

Ve çalışan bir gösteri:

<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
nasıl bu şekilde çalışabilirim efendim .. im tür biraz karıştırmak Javascript
SpitFire

1
Ne hakkında kafan karıştı?
Jared Farrish

hakkında ben iki girdi ve burada Satırlar ve Sütunlar girişleri veya başka bir şey bir HTML dosyası yapacak gibi mi?
SpitFire

1
Söylediklerini gerçekten takip etmiyorum. Dizinizle ne yapmaya çalışıyorsunuz? (Ayrıca, son düzenlememe bakın.)
Jared Farrish

dizi im benzersiz bir ada veya kimliğe sahip bir dizi satır ve sütun girecek .. ve ilk giriş satır ve sütun dizisi R'nin 2. girişlerine çıkarılacak benzersiz bir isim veya kimliğe sahip başka bir satır ve sütun and C ..
SpitFire

28

JavaScript ile Veri Yapıları ve Algoritmalardan alıntı

İyi Parçalar (O'Reilly, s. 64). Crockford, JavaScript dizi nesnesini satır ve sütun sayısını ayarlayan bir işlevle genişletir ve her değeri işleve iletilen bir değere ayarlar. İşte tanımı:

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

Tanımı test etmek için bazı kodlar:

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"

Ayrıca iki boyutlu bir dizi oluşturabilir ve bunu bir satırdaki bir değer kümesine başlatabiliriz:

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

15

Değer ataması olmadan bildirildi.

2 boyut ...

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

3 boyutlar ...

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

8
Bu örneklerin her ikisi de, belki de tek boyutlu iç içe diziler olarak adlandırılan yalnızca sırasıyla 1x1 ve 1x1x1 diziler üretiyor gibi görünmektedir. var test=new Array(new Array());test[0][0]='1';test[0][1]='2';test[1][0]='3';Exception: test[1] is undefined
Mesajla ilgili

2
Bu yanlış görünüyor. Kodu denediğimde 1x1x0 dizisi alıyorum. jsfiddle.net/zU8SB/1 Nasıl 13 oy aldı?
Randall Cook


12

Bunun eski olduğunu biliyorum ama ...

4x4 örneği (actually 4x<anything>):

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

doldurduğu:

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

Belki 1x4 dışında "hiçbir şeyin (bu nedenle matris [3] [3] 4. sıra, 4. sütun olması) hiçbir şeyin bu varyant beyanı ile beyan edilmediğini (yani erişilebilir) daha açık hale getirebilir. Ayrıca, örnek ayar elemanı [0] [1] ila 5 ilk elemanı atlar. Bunun yerine [0] [0] kullanılması, birçok programlama dilinde önemli bir dizi noktasını göstermek için yararlı olabilir.
user66001

9

Çok basit

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

Konsolda test ettiğimde bu işe yaramıyor gibi görünüyor. Görünüşe göre bir [0,1] ve [1,1] demek için yazdığımda eski değerler siliniyor, ikincisi bir [0,1] siler ...
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

Aşağıdaki kodun gereksiniminize uygun olmasını umuyoruz

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

EVET!! Bu sonsuza dek mücadele ediyor! İşin sırrı, satır sütununda fazladan dizi oluşturmaktır (ya da bir ızgaradan, yükseklikten
yineleniyorsa

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

boyutunu artırmak fonksiyonu sonra değişebilir.


3

İşte benim çözümüm.

3x3 Dizisi için basit bir örnek. Daha derine inmek için bunu zincirlemeye devam edebilirsiniz

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

Ya da aşağıdaki fonksiyon istediğiniz derinlikte herhangi bir seviye üretecektir

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

aşağıdaki kodu takip ederek dizi oluşturabilirsiniz:

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

Sonuç:
[v1] [v2] konum 0
[v3] [v4] konum 1
[v5] [v6] konum 2

Diziye dinamik olarak eklemek için aşağıdaki yöntemi kullanın:

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

Bu yardımcı olur umarım. :)


1

Bazı ek esneklik ile bunu yapmak için bir npm modülü oluşturdum :

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

Ayrıca, konumları herhangi bir değerle başlatabilirsiniz:

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

Veya daha gelişmiş:

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

Değerleri konumlardan alın ve ayarlayın:

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

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

0

Bunun için bir lineer yazdım:

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

Ancak burada klonlamaJSON.parse(JSON.stringify()) için kullanılan bir ücretsiz sürümü yapmak için daha fazla zaman harcayabileceğimi hissediyorum .

Btw, burada başka bir cevabım var .


0

Bu eski bir soru olduğunu biliyorum ama burada denemek için bir şey: Çok boyutlu dizi yapmak ve bir html etiketi içine yerleştirin. Bu şekilde dizi girdinizi tam olarak hedefleyebilirsiniz:

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

Bu sadece kodunuzu yazmak için daha temiz bir yol ve çağırmak daha kolay. Demoyu buradan kontrol edebilirsiniz !


document.querySelectorAll();sınıfları, kimlikleri ve hatta öğeleri almak için cesurca gidebilirsiniz !
Gareth Compton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.