कैसे बहुआयामी सरणी बनाने के लिए


148

क्या कोई मुझे इनपुट के बहुआयामी सरणी के साथ जावास्क्रिप्ट का एक नमूना / उदाहरण दे सकता है? आशा है कि आप मदद कर सकते हैं क्योंकि मैं अभी भी जावास्क्रिप्ट में नया हूँ।

जैसे जब आप 2 पंक्तियों और 2 स्तंभों का इनपुट करते हैं, तो इसका आउटपुट इनपुट की 2 पंक्तियों और इनपुट के 2 स्तंभों के रूप में होगा।

ऐशे ही:

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

2
'इनपुट्स' से आपका क्या तात्पर्य है? एक <input>तत्व या सिर्फ कुछ चर?
pimvdb

1
हाँ सर .. एक <input type = "text">
SpitFire

मनमाने आकार और आयामों की संख्या के साथ बहुआयामी सरणियों की तलाश करने वालों के लिए, इस उत्तर को जांचें ।
पिंप ट्राइज़किट

जवाबों:


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/

और यदि आप 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 0

http://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
मुझे पता कर सकते हैं कि इस प्रकार इस काम सर .. IM थोड़े जावास्क्रिप्ट का भ्रमित
स्पिटफायर

1
वह क्या है जिसके बारे में आप भ्रमित हैं?
जारेड फरिश

के बारे में यह एक HTML फ़ाइल बनाने के लिए im की तरह है जहां दो इनपुट हैं और यह पंक्तियों और कॉलम या कुछ और के इनपुट हैं?
स्पिटफायर

1
मैं वास्तव में नहीं कह रहा हूँ कि तुम क्या कह रहे हो। क्या आप अपने सरणी के साथ कोशिश कर रहे हैं? (इसके अलावा, मेरा अंतिम संपादन देखें।)
जेरेड फरिश

सरणी में अनूठे नाम या ID के साथ कई पंक्तियों और स्तंभों को इनपुट करने के लिए जा रहा है..और एक अद्वितीय नाम या आईडी के साथ एक और पंक्तियों और स्तंभों जहां इनपुट पंक्तियों और स्तंभों के पहले सरणी को R के 2 इनपुट में घटाया जाएगा और सी ..
स्पिटफायर

28

जावास्क्रिप्ट के साथ डेटा संरचना और एल्गोरिदम से लिया गया उद्धरण

द गुड पार्ट्स (ओ'रिली, पृष्ठ 64)। क्रॉकफ़ोर्ड एक फ़ंक्शन के साथ जावास्क्रिप्ट सरणी ऑब्जेक्ट का विस्तार करता है जो पंक्तियों और स्तंभों की संख्या निर्धारित करता है और फ़ंक्शन के लिए दिए गए प्रत्येक मान को सेट करता है। यहाँ उसकी परिभाषा है:

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

15

मूल्य असाइनमेंट के बिना घोषित किया गया।

2 आयाम ...

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

3 आयाम ...

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 सरणी मिलती है। jsfiddle.net/zU8SB/1 इसने 13 उत्थान कैसे प्राप्त किए हैं?
रान्डेल कुक


12

मुझे पता है कि यह प्राचीन है लेकिन इसके बारे में क्या ...

4x4 उदाहरण (actually 4x<anything>):

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

जिसके द्वारा भरा जा सकता है:

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

शायद यह अधिक स्पष्ट हो सकता है कि इस संस्करण की घोषणा के साथ 1x4 (इसलिए मैट्रिक्स नहीं [3] [3] 4 वीं पंक्ति, 4 वीं कॉलम) के बाहर "कुछ भी नहीं" (यानी, सुलभ) घोषित किया गया है। इसके अलावा, उदाहरण सेटिंग तत्व [0] [1] 5 पहले तत्व को छोड़ देता है। इसके बजाय [0] [0] का उपयोग करना, बहुत सारी प्रोग्रामिंग भाषाओं में सरणियों के एक महत्वपूर्ण बिंदु को प्रदर्शित करने के लिए उपयोगी हो सकता है।
user66001

9

बहुत आसान

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

जब मैं इसे कंसोल में परीक्षण करता हूं तो यह काम नहीं करता है। ऐसा लगता है कि जब मैं [0,1] और [1,1] कहने के लिए पुराने मूल्यों को हटाता हूं, तो दूसरा एक [0,1] हटाता है ...
थॉमस डिग्नन

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

आशा है कि निम्नलिखित कोड आपकी आवश्यकता के अनुरूप होगा

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

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

अपने कार्य के बाद आकार में वृद्धि।


3

तो यहाँ मेरा समाधान है।

एक 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] [वी २] स्थिति ०
[वी ३] [वी ४] की स्थिति १
[वी ५] [वी ६] की स्थिति २

डाइनैमिक रूप से सरणी में जोड़ने के लिए, नीचे दी गई विधि का उपयोग करें:

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

उम्मीद है की यह मदद करेगा। :)


1

मैंने कुछ अतिरिक्त लचीलेपन के साथ ऐसा करने के लिए एक npm मॉड्यूल बनाया है:

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

आप किसी भी मान के साथ पदों को इनिशियलाइज़ कर सकते हैं:

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

या अधिक उन्नत:

// 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 value
threedimensional.position([2, 2, 2])

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

0

मैंने इसके लिए एक रेखीय लिखा है:

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

मुझे लगता है कि हालांकि, मैं एक JSON.parse(JSON.stringify())मुक्त संस्करण बनाने के लिए अधिक समय बिता सकता हूं, जिसका उपयोग यहां क्लोनिंग के लिए किया जाता है।

Btw, यहाँ मेरे एक और जवाब पर एक नज़र है


0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन यहाँ कुछ करने की कोशिश की गई है: अपना बहुआयामी सरणी बनाएं, और इसे html टैग के अंदर रखें। इस तरह से आप अपने सरणी इनपुट का सटीक लक्ष्य बना सकते हैं:

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

अपने कोड को लिखने और आह्वान करने में आसान तरीके से इसका सरल तरीका है। आप यहाँ मेरा डेमो देख सकते हैं!


आप document.querySelectorAll();कक्षाओं, आईडी और यहां तक ​​कि तत्वों को प्राप्त करने के लिए फ़ोल्डर में जा सकते हैं !
गैरेथ कॉम्पटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.