আমি কীভাবে জাভাস্ক্রিপ্টে একটি দ্বিমাত্রিক অ্যারে তৈরি করতে পারি?


1137

আমি অনলাইনে পড়ছি এবং কিছু জায়গাগুলি বলেছে এটি সম্ভব নয়, কেউ কেউ বলে এবং এটি একটি উদাহরণ দেয় এবং অন্যরা উদাহরণটিকে খণ্ডন করে ইত্যাদি

  1. আমি কীভাবে জাভাস্ক্রিপ্টে 2 মাত্রিক অ্যারে ঘোষণা করব? (ধরে নেওয়া সম্ভব)

  2. আমি কীভাবে এর সদস্যদের অ্যাক্সেস করব? ( myArray[0][1]বা myArray[0,1]?)


21
কিছুটা পেডেন্টিক সংজ্ঞা ধরে নেওয়া, জাভাস্ক্রিপ্টে 2 ডি অ্যারে তৈরি করা প্রযুক্তিগতভাবে অসম্ভব। তবে আপনি অ্যারেগুলির একটি অ্যারে তৈরি করতে পারেন যা এটির অনুরূপ।
আইজে কেনেডি

10
এফওয়াইআই ... আপনি যখন আরও অ্যারে ব্যবহার করে একটি অ্যারে পূরণ করবেন তখন অ্যারের var arr2D = new Array(5).fill(new Array(3));প্রতিটি উপাদান (5) একই অ্যারে (3) এ নির্দেশ করবে। সুতরাং সাব অ্যারেগুলিকে গতিশীলভাবে পপুলেশন করতে লুপের জন্য ব্যবহার করা ভাল best
জোশ স্ট্রিলিং

51
a = Array(5).fill(0).map(x => Array(10).fill(0))
লংফেই উ উ

2
অন্য কথায়, অ্যারের প্রতিটি সূচী পূরণ fillকরার new Array(3)জন্য আহ্বান করবেন না , কারণ এটি ল্যাম্বডা এক্সপ্রেশন বা কিছুই নয়, যেমন উপরের লংফেই উয়ের মন্তব্য, যা প্রাথমিকভাবে 0 এর সাথে অ্যারে পূরণ করে, তারপরে ল্যাম্বডায় মানচিত্রটি ব্যবহার করে প্রতিটি উপাদান একটি নতুন অ্যারে পূরণ করুন। ফিল ফাংশনটি কেবল আপনাকে যা বলবে তা দিয়ে কেবল অ্যারে পূরণ করে। যে জানার জন্য? mapফাংশনটি সম্পর্কে আরও তথ্যের জন্য , দেখুন: বিকাশকারী.মোজিলা.আর.ইন.ইউএস
ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স /

2
@ কালেহমান ভালো আছেন: meta.stackoverflow.com/a/252017/2311074 If the new question is a better question or has better answers, then vote to close the old one as a duplicate of the new one.
অ্যাডাম

উত্তর:


1231

var items = [
  [1, 2],
  [3, 4],
  [5, 6]
];
console.log(items[0][0]); // 1
console.log(items[0][1]); // 2
console.log(items[1][0]); // 3
console.log(items[1][1]); // 4
console.log(items);


32
কোনও বৃহত বহুমাত্রিক অ্যারে এভাবে শুরু করা কঠিন হবে be তবে এই ফাংশনটি প্যারামিটার হিসাবে নির্দিষ্ট মাত্রাগুলি সহ খালি বহুমাত্রিক তৈরি করতে ব্যবহৃত হতে পারে।
অ্যান্ডারসন গ্রিন

2
@ আন্ডারসনগ্রিন এটি মাল্টি-ডি অ্যারে সমাধানে আগ্রহী ব্যক্তিদের জন্য একটি লিঙ্ক উল্লেখ করার মতো একটি ভাল জিনিস, তবে প্রশ্ন এবং বোলাসাচিয়ান 1 এর উত্তর "2 ডি" অ্যারে সম্পর্কে, "মাল্টি-ডি" অ্যারে সম্পর্কে নয়
অশুভরিকো

আপনার পুরো জিনিসটি অতিক্রম করা উচিত ... যেমন সতর্কতা (আইটেম [0] [1]); // 2 ইত্যাদি
ডয়েস

1
@ শশিকাএক্সপি, এটি 0 ছাড়াই প্রথম সূচকগুলির জন্য কাজ করে না
মাইকেল ফ্রানজল

1
প্রশ্নটি কীভাবে দ্বিমাত্রিক অ্যারে ঘোষণা করবেন। আমি যা খুঁজছিলাম এবং এটি খুঁজে পেয়েছিলাম এবং উত্তরগুলি যা ঘোষণা এবং আরম্ভ করার মধ্যে পার্থক্যটি সনাক্ত করতে ব্যর্থ হয়। জ্ঞাত দৈর্ঘ্য বা আনবাউন্ডেড সহ ঘোষণাপত্রও রয়েছে, যার মধ্যে দুটিও আলোচনা করা হয়নি।
ক্রিস

444

আপনি কেবল অ্যারের মধ্যে প্রতিটি আইটেমকে একটি অ্যারে তৈরি করেন।

var x = new Array(10);

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

console.log(x);


6
তারা কি কী এবং মানগুলির জন্য স্ট্রিংয়ের মতো জিনিস ব্যবহার করতে পারে? আমারআরয়ে ['বুক'] ['আইটেম 1']?
দিয়েগো

42
@ ডিগো, হ্যাঁ, তবে এটি অ্যারের উদ্দেশ্যে নয়। যখন আপনার কীগুলি স্ট্রিং থাকে তখন কোনও অবজেক্ট ব্যবহার করা ভাল।
ম্যাথু ক্রামলে

10
আমি গ্রহণযোগ্য উত্তরের চেয়ে এই উদাহরণটি আরও ভাল পছন্দ করি কারণ এটি পরিবর্তনশীল আকারের অ্যারেগুলির জন্য প্রয়োগ করা যেতে পারে, উদাহরণস্বরূপ new Array(size)যেখানে sizeপরিবর্তনশীল।
ভেরিয়াদিজম

1
কাজ করে না - নিয়োগের ক্ষেত্রে ত্রুটি। এই উত্তরটি কীভাবে অকার্যকর হলে 280 টি পছন্দ পেয়েছে?
গারগো

1
এটি কাজ করছে, ধন্যবাদ। আপনি উদাহরণটি দেখতে পারেন গারগো jsfiddle.net/matasoy/oetw73sj
matasoy

198

অ্যাক্টিবার জবাবের অনুরূপ, একটি n- মাত্রিক অ্যারে তৈরি করার জন্য এখানে একটি ফাংশন রয়েছে:

function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args);
    }

    return arr;
}

createArray();     // [] or new Array()

createArray(2);    // new Array(2)

createArray(3, 2); // [new Array(2),
                   //  new Array(2),
                   //  new Array(2)]

2
এটি কি 4 টি মাত্রিক অ্যারে তৈরি করতে পারে?
trusktr

4
@ ট্রাসক্রিটার: হ্যাঁ, আপনি যতগুলি মাত্রা চান তৈরি করতে পারেন (আপনার স্মৃতির সীমাবদ্ধতায়)। মাত্র চারটি মাত্রার দৈর্ঘ্যে পাস করুন। উদাহরণস্বরূপ var array = createArray(2, 3, 4, 5);,।
ম্যাথু ক্রামলে

4
সেরা উত্তর ! তবে আমি 0 বা 1 পরামিতি (অকেজো) দিয়ে এটি ব্যবহার করার পরামর্শ দেব না
অ্যাপোলো

2
@BritishDeveloper হ্যাঁ। এটি 5D এ প্রতিটি দৈর্ঘ্যের সাথে 5D অ্যারে:[[[[[null,null],[null,null]],[[null,null],[null,null]]],[[[null,null],[null,null]],[[null,null],[null,null]]]],[[[[null,null],[null,null]],[[null,null],[null,null]]],[[[null,null],[null,null]],[[null,null],[null,null]]]]]
হাইকম

2
@ হাইকাম আপনার সময় নষ্ট করার জন্য দুঃখিত - আমি ব্যঙ্গাত্মক হয়ে
উঠছিলাম

84

জাভাস্ক্রিপ্টে কেবলমাত্র 1-মাত্রিক অ্যারে রয়েছে, তবে অন্যরা ইঙ্গিত হিসাবে আপনি অ্যারেগুলির অ্যারে তৈরি করতে পারেন।

নিম্নলিখিত মাত্রার একটি 2-ডি অ্যারে তৈরি করতে নিম্নলিখিত ফাংশনটি ব্যবহার করা যেতে পারে:

function Create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

কলামগুলির সংখ্যা সত্যই গুরুত্বপূর্ণ নয়, কারণ এটি ব্যবহারের আগে অ্যারের আকার নির্দিষ্ট করার প্রয়োজন হয় না।

তারপরে আপনি কেবল কল করতে পারেন:

var arr = Create2DArray(100);

arr[50][2] = 5;
arr[70][5] = 7454;
// ...

আমি একটি 2-ডিমে অ্যারে তৈরি করতে চাই যা কার্ডের ডেকে উপস্থাপন করবে। যা কোনও 2-ডিম্প অ্যারে হবে যা কার্ডের মান ধরে রাখে এবং তারপরে স্যুট। এটি করার সবচেয়ে সহজ উপায় কী হবে।
ডগ হাউফ

1
ফাংশন ক্রিয়েট 2 ডিআররে (সারি) {ভের অ্যারে = []; (var i = 0; i <সারি; i ++) r আরআর [i] = []; } রিটার্ন এআর; t (t = 1; t <= 4; t ++) {এর জন্য i ফাংশন প্রিন্ট (ডেক) print (i = 1; i <= 13; i ++) {ডকুমেন্ট.উইটেলন (ডেক [টি] [i]); (টি = 1; টি <= 4; টি ++) {মাইকার্ডেক [টি] [1] = টি; (i = 1; i <= 13; i ++) {মাইকার্ডডেক [t] [i] = i; ;}} ফাংশন লোডকার্ডডেক () my আমার মাইকারডেক = ক্রিয়েট 2 ডিআররে (13); fillDeck (myCardDeck); মুদ্রণ (myCardDeck); }
ডগ হাউফ

2
@ ডউগ: আপনি আসলে 2 টি বৈশিষ্ট্যযুক্ত অবজেক্টের এক-মাত্রিক অ্যারে চান। var ডেক = []; ডেক [0] = {মুখ: 1, স্যুট: 'এইচ'};
টিজিংডার্ট

@ দৌগহফ এটি একটি মনিডেড 2 ডি-অ্যারে ?? : পি: ডি
মাহি

78

সহজতম পথ:

var myArray = [[]];

29
যা একটি 2-মাত্রিক অ্যারে
মরিজিও ইন ডেনমার্ক

15
হ্যাঁ, সাবধান। মাইআরাই [0] [যাই হোক না কেন] ঠিকঠাক বরখাস্ত করুন, তবে মাইআরাই [1] [যা কিছু] সেট করে সেট করুন এবং এটি অভিযোগ করে যে মাইআরাই [1] অপরিজ্ঞাত is
ফিলিপ

22
@ ফিলিপ আপনাকে myArray[1]=[];নিয়োগের আগে সেট করতে হবেmyArray[1][0]=5;
182764125216

4
সচেতন হন, এটি "অ্যান্ডারসন গ্রিন যেমন লিখেছেন" খালি 1x1 অ্যারে তৈরি করে না "। এটি একটি "1x0" অ্যারে তৈরি করে (অর্থাত 1 টি সারি 0 কলাম সহ একটি অ্যারে রয়েছে)। myArray.length == 1এবং myArray[0].length == 0। এরপরে কোনটি ভুল ফলাফল দেয় যদি আপনি এটির পরে "সত্যিকারের খালি" "0x0" অ্যারে অনুলিপি করেন।
জোনব্রেভ

3
@ 182764125216 এটি আমার জন্য সেই দিনের জ্ঞান ছিল । ধন্যবাদ :)
th3pirat3

76

খালি দ্বিমাত্রিক অ্যারে কীভাবে তৈরি করবেন (এক-লাইন)

Array.from(Array(2), () => new Array(4))

2 এবং 4 যথাক্রমে প্রথম এবং দ্বিতীয় মাত্রা।

আমরা ব্যবহার করছি Array.from, যা প্রতিটি উপাদানগুলির জন্য একটি অ্যারের মতো পরম এবং optionচ্ছিক ম্যাপিং নিতে পারে।

অ্যারে.ফ্রম (অ্যারে লাইক [, মানচিত্রফাঁস [, এটিআরজি]])

var arr = Array.from(Array(2), () => new Array(4));
arr[0][0] = 'foo';
console.info(arr);

1 ... এন যুক্ত একটি জাভাস্ক্রিপ্ট অ্যারে তৈরি করতে একই কৌশল ব্যবহার করা যেতে পারে


বিকল্পভাবে (তবে আরও 12% এর সাথে অদক্ষn = 10,000 )

Array(2).fill(null).map(() => Array(4))

পারফরম্যান্স হ্রাস সত্যের সাথে আসে যে আমাদের চালনার জন্য প্রথম মাত্রার মানগুলি শুরু করতে হবে .map। মনে রাখবেন যে Arrayপদগুলি বরাদ্দ দেওয়া হবে না যতক্ষণ না আপনি এটিকে অর্ডার না করে .fillবা সরাসরি মূল্য নির্ধারণের আদেশ দেন।

var arr = Array(2).fill(null).map(() => Array(4));
arr[0][0] = 'foo';
console.info(arr);


অনুসরণ করুন

এখানে এমন একটি পদ্ধতি রয়েছে যা সঠিক দেখা যাচ্ছে তবে এতে সমস্যা রয়েছে

 Array(2).fill(Array(4)); // BAD! Rows are copied by reference

এটি আপাতভাবে কাঙ্ক্ষিত দুটি মাত্রিক অ্যারে ( [ [ <4 empty items> ], [ <4 empty items> ] ]) ফেরত দেওয়ার সময় , সেখানে একটি ধরা: প্রথম মাত্রার অ্যারেগুলি রেফারেন্স দ্বারা অনুলিপি করা হয়েছে। এর অর্থ হ'ল একটি arr[0][0] = 'foo'আসলে একের পরিবর্তে দুটি সারি পরিবর্তন করবে।

var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo';
console.info(arr);
console.info(arr[0][0], arr[1][0]);


আমি Array.from({length:5}, () => [])
এটির

এখানে বিষয়যুক্ত তবে এই উত্তরটি (এর মধ্যে প্রথম এবং দ্বিতীয়) মনে হয় সংক্ষিপ্ত, দ্রুত এবং আধুনিকের সেরা ভারসাম্য।
ব্র্যাডি দোলিং 21

@ জুরফেক্স কোনও ধারণা, বা কেউ জানেন যে ওয়েবস্টর্ম কেন এ সম্পর্কে অভিযোগ করছে? এটি অ্যারে বলে মনে হচ্ছে rom থেকে মানগুলি অপরিজ্ঞাত হিসাবে রেখে যায় এবং তারপরে আমি তৈরি অ্যারের সাথে কাজ করতে পারি না, যদিও স্নিপেটটি এখানে
স্ট্যাকওভারফ্লোতে দুর্দান্তভাবে চালিত হয়

46

কেউ কেউ বলছেন যে এটি সম্ভব নয় এটি কারণ দ্বিমাত্রিক অ্যারে সত্যই অ্যারে মাত্র। এখানে অন্যান্য মন্তব্যগুলি জাভাস্ক্রিপ্টে দ্বি মাত্রিক অ্যারে তৈরির জন্য পুরোপুরি বৈধ পদ্ধতিগুলি সরবরাহ করে তবে বিশুদ্ধতম দৃষ্টিভঙ্গিটি হ'ল আপনার কাছে বস্তুর একটি মাত্রিক অ্যারে রয়েছে those এই বস্তুর প্রতিটিই দুটি উপাদানের সমন্বয়ে একটি মাত্রিক অ্যারে হবে।

সুতরাং, এটি বিরোধী ভিউ পয়েন্টগুলির কারণ।


41
না এইটা না. কিছু ভাষায়, আপনার কাছে বহুমাত্রিক অ্যারে থাকতে পারে string[3,5] = "foo";। এটি কিছু দৃশ্যের জন্য আরও ভাল পদ্ধতির, কারণ ওয়াই অক্ষগুলি আসলে এক্স অক্ষের একটি শিশু নয়।
রাফায়েল সোয়রেস

3
এটি অন্তর্নিহিত মেশিন কোডে পৌঁছে গেলে, মাত্রা> 1 এর সমস্ত টেনারগুলি অ্যারেগুলির অ্যারে হয়, আমরা যে কোনও ভাষা নিয়ে কথা বলছি। ক্যাশে অপ্টিমাইজেশনের কারণে এটি মাথায় রাখাই সার্থক। যে কোনও শালীন ভাষা সংখ্যার কম্পিউটিংয়ের জন্য গুরুত্ব সহকারে পরিবেশন করে তা আপনাকে আপনার বহুমাত্রিক কাঠামোটিকে মেমরিতে এমনভাবে সাজানোর অনুমতি দেয় যাতে আপনার সর্বাধিক ব্যবহৃত মাত্রাটি স্বচ্ছভাবে সংরক্ষণ করা হয়। পাইথনের নম্পি, ফোর্টরান এবং সি মনে পড়ে। প্রকৃতপক্ষে এমন কেস রয়েছে যখন এই কারণে একাধিক কাঠামোর মধ্যে মাত্রিকতা হ্রাস করা সার্থক।
থমাস ব্রাউন

কম্পিউটারগুলির মাত্রার কোনও ধারণা নেই। মাত্র 1 টি মাত্রা, মেমরি ঠিকানা। বাকি সব প্রোগ্রামারটির সুবিধার জন্য নোটেশনাল ডেকোরেশন।
টিজিংআর্ট

3
@ থমাস ব্রাউন ঠিক নেই "অ্যারের অ্যারে" এর অভ্যন্তরীণ অ্যারের আকারগুলির জন্য কিছু স্টোরেজ প্রয়োজন (তারা পৃথক হতে পারে) এবং অভ্যন্তরীণ অ্যারেটি সঞ্চিত রয়েছে এমন জায়গা খুঁজতে অন্য পয়েন্টারটি ডিरेফারেন্সিং করতে হবে। যে কোনও "শালীন" ভাষায় বহুমাত্রিক অ্যারে জ্যাজেড অ্যারে থেকে পৃথক, কারণ সেগুলি প্রতি সেচের জন্য বিভিন্ন ডেটা স্ট্রাকচার। (এবং বিভ্রান্তিমূলক অংশটি হ'ল সি অ্যারেগুলি বহুমাত্রিক, যদিও তাদের [এ] [বি] বাক্য
গঠনের সাথে সূচিযুক্ত করা হয়েছে

33

খুব কম লোকই পুশের ব্যবহার দেখায়:
নতুন কিছু আনার জন্য, আমি আপনাকে দেখাব যে কীভাবে ম্যাট্রিক্সকে কিছু মান দিয়ে শুরু করতে হবে, উদাহরণ: 0 বা একটি ফাঁকা স্ট্রিং ""।
মনে করিয়ে দিচ্ছেন যে আপনার যদি 10 টি উপাদান অ্যারে থাকে তবে জাভাস্ক্রিপ্টে শেষ সূচকটি 9 হবে!

function matrix( rows, cols, defaultValue){

  var arr = [];

  // Creates all lines:
  for(var i=0; i < rows; i++){

      // Creates an empty line
      arr.push([]);

      // Adds cols to the empty line:
      arr[i].push( new Array(cols));

      for(var j=0; j < cols; j++){
        // Initializes:
        arr[i][j] = defaultValue;
      }
  }

return arr;
}

ব্যবহারের উদাহরণ:

x = matrix( 2 , 3,''); // 2 lines, 3 cols filled with empty string
y = matrix( 10, 5, 0);// 10 lines, 5 cols filled with 0

আমি forআপনার পদ্ধতি থেকে শেষটি (যা ডিফল্ট মান নির্ধারণ করে) সরান এবং লিখি m=matrix(3,4); m[1][2]=2; console.log(JSON.stringify(m));- এবং আমরা খুব স্ট্র্যাজ ম্যাট্রিক্স পেয়েছি (খুব বেশি নেস্টেড) - আপনি এটি শেষ-ডিফল্ট ভ্যালু ধাপে মেরামত করেন, তবে আমি মনে করি আপনি কম নেস্টেড অ্যারেগুলি ব্যবহার করার জন্য পদ্ধতিটি পুনরায় লিখতে পারবেন I ডিফল্ট মান নির্ধারণ।
কামিল কিয়েসজেউস্কি

27

দুই মাছ ধরার নৌকা:

var a = []; 
while(a.push([]) < 10);

এটি অ্যারে ভরা 10 দৈর্ঘ্যের একটি অ্যারে তৈরি করবে। (পুশ একটি অ্যারেতে একটি উপাদান যোগ করে এবং নতুন দৈর্ঘ্য ফেরত দেয়)


13
এক-লাইনের: for (var a=[]; a.push([])<10;);?
বার্গি

@ বেরগি এখনও একটি পরিবর্তনশীল পরবর্তী লাইনে সংজ্ঞায়িত করা হবে ..?
StinkyCat

1
@ স্টিঙ্কিটিকেট: হ্যাঁ, এটি কীভাবে varকাজ করে। এটি সর্বদা ফাংশন-স্কোপড।
বার্গি

আমি জানি, অতএব আপনার ওয়ান-
লাইনারটি

1
ডোমেনুক এবং @ বার্গি, আপনি দুজনেই সঠিক। আমি চেষ্টা করে দেখেছি এবং এর পরে আমি অ্যাক্সেস করতে পারি। আমি ক্ষমা প্রার্থনা করছি! এবং আপনাকে ধন্যবাদ, এটি আমার কাছে একটি পাঠ হতে পারে;)
StinkyCat

24

স্যানিট উত্তরটি বলে মনে হচ্ছে

var nrows = ~~(Math.random() * 10);
var ncols = ~~(Math.random() * 10);
console.log(`rows:${nrows}`);
console.log(`cols:${ncols}`);
var matrix = new Array(nrows).fill(0).map(row => new Array(ncols).fill(0));
console.log(matrix);


দ্রষ্টব্য, আমরা সরাসরি সারিগুলি পূরণ করতে পারি না কারণ ফিলগুলি অগভীর অনুলিপি নির্মাণকারী ব্যবহার করে, সুতরাং সমস্ত সারি একই মেমরি ভাগ করে নেবে ... এখানে উদাহরণস্বরূপ যা প্রতিটি সারি কীভাবে ভাগ করা হবে তা প্রদর্শন করে (অন্যান্য উত্তর থেকে নেওয়া):

// DON'T do this: each row in arr, is shared
var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo'; // also modifies arr[1][0]
console.info(arr);

এটি একেবারে শীর্ষে থাকা উচিত। আমি ব্যবহার করে অনুরূপ কিছু করেছি Array.apply(null, Array(nrows))তবে এটি আরও মার্জিত।
ডিমিগুয়েল

এটি আমার শেষ মন্তব্য সম্পর্কে ... ইন্টারনেট এক্সপ্লোরার এবং অপেরাটির সমর্থন নেই fill। এটি বেশিরভাগ ব্রাউজারে কাজ করবে না।
ডিগিগুয়েল

@ ডিমগল ফিলকে এই ধরণের স্থির মানচিত্রের সাথে অনুকরণ করা যায়: Array(nrows).map(() => 0)বা,Array(nrows).map(function(){ return 0; });
কনর ও'ব্রায়ান

20

সহজতম পথ:

var arr  = [];

var arr1 = ['00','01'];
var arr2 = ['10','11'];
var arr3 = ['20','21'];

arr.push(arr1);
arr.push(arr2);
arr.push(arr3);

alert(arr[0][1]); // '01'
alert(arr[1][1]); // '11'
alert(arr[2][0]); // '20'

18

এটিই আমি অর্জন করেছি:

var appVar = [[]];
appVar[0][4] = "bineesh";
appVar[0][5] = "kumar";
console.log(appVar[0][4] + appVar[0][5]);
console.log(appVar);

এটি আমাকে বানেশকুমার বানান করেছিল


2
আপনি কীভাবে প্যারেন্ট অ্যারের 0 সূচকটি অ্যাক্সেস করতে পারবেন তা লক্ষ্য করুন। এটি এমন কোনও কিছুর মতো দরকারী নয় যা আপনাকে সেট করতে দেয়, উদাহরণস্বরূপ, অ্যাপভার [5] [9] = 10; ... আপনি এটি দিয়ে 'অপরিজ্ঞাপিত "9" সম্পত্তি সেট করতে অক্ষম পাবেন।
কিসিনব্রানক্রাঞ্চ

তবে appVar[1][4] = "bineesh";ভুল, কীভাবে সমাধান করবেন?
গাঙ্ক

16

দ্বি মাত্রিক অ্যারে একইভাবে তৈরি করা হয় একইভাবে একক মাত্রিক অ্যারেগুলি। এবং আপনি তাদের মত অ্যাক্সেস array[0][1]

var arr = [1, 2, [3, 4], 5];

alert (arr[2][1]); //alerts "4"

14

আমি নিশ্চিত না যে কেউ এর জবাব দিয়েছে কিনা তবে আমি এটি আমার জন্য বেশ ভালভাবে কাজ করেছি -

var array = [[,],[,]]

উদাহরণ:

var a = [[1,2],[3,4]]

উদাহরণস্বরূপ একটি 2 মাত্রিক অ্যারের জন্য।


আমি কীভাবে এই গতিশীলভাবে করতে পারি? আমি বিভিন্ন আকারের সাথে অভ্যন্তরীণ অ্যারেগুলি চাই।
আলাপ

3
আপনার অতিরিক্ত কমা দরকার var array = [[],[]]নেই পর্যাপ্ত।
কেয়া টোস্ট

13

জাভা স্ক্রিপ্টে একটি 2D অ্যারে তৈরি করতে আমরা প্রথমে একটি অ্যারে তৈরি করতে পারি এবং তারপরে অ্যারের উপাদান হিসাবে এটি যুক্ত করতে পারি। এই পদ্ধতিটি প্রদত্ত সংখ্যক সারি এবং কলামগুলির সাথে 2D অ্যারে প্রদান করবে।

function Create2DArray(rows,columns) {
   var x = new Array(rows);
   for (var i = 0; i < rows; i++) {
       x[i] = new Array(columns);
   }
   return x;
}

অ্যারে তৈরি করতে নীচের মত এই পদ্ধতিটি ব্যবহার করুন।

var array = Create2DArray(10,20);

2
আপনি কীভাবে এটি কাজ করে এবং কেন এটি সমস্যার সমাধান করে তা দেখিয়ে আপনার উত্তরদাতাকে কিছু ব্যাখ্যামূলক তথ্য যুক্ত করবেন Please এটি ভবিষ্যতে এই পৃষ্ঠাটি
আমাদের ম্যান ইন কলা

জাভা স্ক্রিপ্টে একটি নির্দিষ্ট সংখ্যক কলমের সাথে পূর্বনির্ধারিত এমন অ্যারের কখন আপনার প্রয়োজন হবে? আপনি একটি [] অ্যারের এন-তম উপাদানটিও অ্যাক্সেস করতে পারেন।
ডোমেনুক

আমি লক্ষ্য করেছি যে ফাংশনটি মূলধন সি দিয়ে শুরু হয়, যা (নির্দিষ্ট কনভেনশন অনুসারে) প্রস্তাব দেয় এটি কোনও ফাংশন কনস্ট্রাক্টর হবে এবং আপনি এটি নতুন কীওয়ার্ড দিয়ে ব্যবহার করবেন। খুব সামান্য এবং কিছুটা মতামত দেওয়া হতে পারে তবে আমি এখনও মূলধনহীন শব্দটির পরামর্শ দেব।
হাচি

12

সমস্ত সূচক ঠিকানার যোগ্য এবং মানগুলিকে নালায় সেট করে একটি স্পার্সহীন "2D" অ্যারে (x, y) তৈরি করতে:

let 2Darray = new Array(x).fill(null).map(item =>(new Array(y).fill(null))) 

বোনাস "3 ডি" অ্যারে (x, y, z)

let 3Darray = new Array(x).fill(null).map(item=>(new Array(y).fill(null)).map(item=>Array(z).fill(null)))

এই পরিবর্তনের এবং সংশোধনগুলি মন্তব্যে এবং এই প্রশ্নের জবাবে বিভিন্ন পয়েন্টে উল্লেখ করা হয়েছে তবে আসল উত্তর হিসাবে নয় তবে আমি এটি এখানে যুক্ত করছি।

এটি লক্ষ করা উচিত যে (বেশিরভাগ অন্যান্য উত্তরের মতো) এটিতে ও (x * y) সময় জটিলতা রয়েছে তাই এটি সম্ভবত খুব বড় অ্যারেগুলির জন্য উপযুক্ত নয়।


1
সতর্কতা অবলম্বন করুন কারণ fillএকই মান সেট করুন। যদি null`অবজেক্টে পরিবর্তন করা হয় তবে এটি প্রতিটি কলামে একই জিনিস হবে
স্টানিস্লাভ মেয়রভ

@ স্ট্যানিসালাভমায়োরভ আপনি যদি প্রতিটি ঘরের মূল্য নির্ধারণ করতে চান তবে ঠিক একই কৌশলটি ব্যবহার করুন:let 2Darray = new Array(x).fill(null).map(item =>(new Array(y).fill(null).map(cell =>(yourValueHere))))
হাইকম

10

অ্যারে সংবিধান ব্যবহার করুন

জাভাস্ক্রিপ্ট ১.7 এবং উচ্চতর ক্ষেত্রে আপনি দুটি মাত্রিক অ্যারে তৈরি করতে অ্যারে বোঝার ব্যবহার করতে পারেন । অ্যারে পূরণ করার সময় আপনি এন্ট্রিগুলিকে ফিল্টার করতে এবং / অথবা হেরফের করতে পারেন এবং লুপগুলি ব্যবহার করতে হবে না।

var rows = [1, 2, 3];
var cols = ["a", "b", "c", "d"];

var grid = [ for (r of rows) [ for (c of cols) r+c ] ];

/* 
         grid = [
            ["1a","1b","1c","1d"],
            ["2a","2b","2c","2d"],
            ["3a","3b","3c","3d"]
         ]
*/

আপনি যে কোনও n x mঅ্যারে তৈরি করতে পারেন এবং কল করে এটি একটি ডিফল্ট মান দিয়ে পূরণ করতে পারেন

var default = 0;  // your 2d array will be filled with this value
var n_dim = 2;
var m_dim = 7; 

var arr = [ for (n of Array(n_dim)) [ for (m of Array(m_dim) default ]] 
/* 
         arr = [
            [0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0],
         ]
*/

আরও উদাহরণ এবং ডকুমেন্টেশন এখানে পাওয়া যাবে

দয়া করে নোট করুন যে এটি এখনও কোনও আদর্শ বৈশিষ্ট্য নয়


এখানে একটি দ্রুত গুগল চেক করুন ... হ্যাঁ ... forবিবৃতিটি এখনও লুপ ...
পিম্প ট্রাইস্কিট

1
এটি কোনও ব্রাউজার দ্বারা সমর্থিত নয় - এখানে ?
কামিল কিয়েসজেউস্কি

10

একটি লাইনার প্রেমীদের জন্য অ্যারে.ফর্ম ()

// creates 8x8 array filed with "0"    
const arr2d = Array.from({ length: 8 }, () => Array.from({ length: 8 }, () => "0"))

অন্য একটি (দিমিত্রি_রোমানভের মন্তব্য থেকে) অ্যারে ব্যবহার করুন ()। পূরণ করুন ()

// creates 8x8 array filed with "0"    
const arr2d = Array(8).fill(0).map(() => Array(8).fill("0"))

ES6 + স্প্রেড অপারেটর ব্যবহার করে (অনুপ্রাণিত JW উত্তর দ্বারা "অনুপ্রাণিত" :))

// same as above just a little shorter
const arr2d = [...Array(8)].map(() => Array(8).fill("0"))

2
আমরা 0প্রথম fill()const arr2d = Array(8).fill().map(() => Array(8).fill("0"));
ফাংশনটিতে

8

আমার দৃষ্টিভঙ্গি @ বিণেশ উত্তরের সাথে খুব মিল তবে আরও সাধারণ পদ্ধতির সাথে।

আপনি নিম্নলিখিত হিসাবে ডাবল অ্যারে ঘোষণা করতে পারেন:

var myDoubleArray = [[]];

এবং নিম্নলিখিত পদ্ধতিতে সামগ্রী সংরক্ষণ এবং অ্যাক্সেস:

var testArray1 = [9,8]
var testArray2 = [3,5,7,9,10]
var testArray3 = {"test":123}
var index = 0;

myDoubleArray[index++] = testArray1;
myDoubleArray[index++] = testArray2;
myDoubleArray[index++] = testArray3;

console.log(myDoubleArray[0],myDoubleArray[1][3], myDoubleArray[2]['test'],) 

এটি প্রত্যাশিত আউটপুট প্রিন্ট করবে

[ 9, 8 ] 9 123

7

আমি নীচে পাওয়া সহজ উপায়:

var array1 = [[]];   
array1[0][100] = 5; 

alert(array1[0][100]);
alert(array1.length);
alert(array1[0].length);

array1[1][100] = 666;নিক্ষেপUncaught TypeError: Cannot set property '100' of undefined
কামিল কিয়েসজেউস্কি

@ কামিলকিএজেজেউস্কি আপনি ঠিক বলেছেন, দেখে মনে হচ্ছে এটি কেবল অ্যারের প্রথম অ্যারের জন্য শুরু করে, দ্বিতীয়টি করার আগে array1[1][100] = 666;, আপনাকে এটি করা দরকার array1[1] = [];
জিএমএসএফ

7

কর্মক্ষমতা

আজ 2020.02.05 আমি নির্বাচিত সমাধানগুলির জন্য ক্রোম ভি7979.0, সাফারি ভি 13.0.4 এবং ফায়ারফক্স ভি 72.0 তে ম্যাকওস হাইসিয়ার 10.13.6 এ পরীক্ষা করে নিই।

অ-আরম্ভিকৃত 2 ডি অ্যারের জন্য উপসংহার

  • এসোটেরিক সলিউশন {}/arr[[i,j]](এন) বড় এবং ছোট অ্যারেগুলির জন্য দ্রুত এবং এটি দেখে মনে হয় এটি বড় স্পার্স অ্যারেগুলির জন্য ভাল পছন্দ is
  • for-[]/while(এ, জি) ভিত্তিক সমাধানগুলি দ্রুত এবং এগুলি ছোট অ্যারেগুলির পক্ষে ভাল পছন্দ।
  • সমাধান for-[](বি, সি) দ্রুত এবং এগুলি বড় অ্যারেগুলির জন্য ভাল পছন্দ
  • Array..map/from/fill(I, J, K, L, M) ভিত্তিক সমাধানগুলি ছোট অ্যারেগুলির জন্য বেশ ধীর এবং বড় অ্যারেগুলির জন্য বেশ দ্রুত
  • সার্ফিনসিং for-Array(n)(বি, সি) for-[](এ) এর তুলনায় সাফারিটির তুলনায় অনেক ধীর
  • for-[]বড় বড় অ্যারের জন্য surprinsingly (এ) সমস্ত ব্রাউজারে ধীর
  • সমাধান কে সমস্ত ব্রাউজারের জন্য ছোট অ্যারেগুলির জন্য ধীর
  • সমাধান এ, ই, জি সমস্ত ব্রাউজারগুলির জন্য বড় অ্যারেগুলির জন্য ধীর
  • সমাধান এম সমস্ত ব্রাউজারে সমস্ত অ্যারেগুলির জন্য সবচেয়ে ধীর

এখানে চিত্র বর্ণনা লিখুন

আরম্ভিক 2 ডি অ্যারের জন্য উপসংহার

  • for/while(এ, বি, সি, ডি, ই, জি) এর উপর ভিত্তি করে সমাধানগুলি সমস্ত ব্রাউজারে ছোট অ্যারেগুলির জন্য দ্রুত / বেশ দ্রুত
  • for(এ, বি, সি, ই) এর উপর ভিত্তি করে সমাধানগুলি সমস্ত ব্রাউজারে বড় অ্যারেগুলির জন্য দ্রুত / বেশ দ্রুত are
  • Array..map/from/fill(I, J, K, L, M) ভিত্তিক সমাধানগুলি সকল ব্রাউজারে ছোট অ্যারেগুলির জন্য মাঝারি দ্রুত বা ধীর হয়
  • বড় অ্যারেগুলির জন্য সমাধান एफ, জি, এইচ, আই, জে, কে, এল ক্রোম এবং সাফারিতে মাঝারি বা দ্রুত তবে ফায়ারফক্সের চেয়ে ধীর হয়।
  • {}/arr[[i,j]]সমস্ত ব্রাউজারে ছোট এবং বড় অ্যারেগুলির জন্য এসোটেরিক সলিউশন (এন) সবচেয়ে ধীর হয়

এখানে চিত্র বর্ণনা লিখুন

বিস্তারিত

সমাধানগুলির জন্য পরীক্ষা যা আউটপুট অ্যারে পূরণ করে না (আরম্ভ)

আমরা এর সমাধানের গতি পরীক্ষা করি

  • ছোট অ্যারে (12 উপাদান) - আপনি এখানে আপনার মেশিনে পরীক্ষা করতে পারেন
  • বড় অ্যারে (1 মিলিয়ন উপাদান) অ্যারে - আপনি এখানে আপনার মেশিনে পরীক্ষা করতে পারেন

সমাধানগুলির জন্য পরীক্ষা যা আউটপুট অ্যারে পূরণ করে (আরম্ভ)

আমরা এর সমাধানের গতি পরীক্ষা করি

  • ছোট অ্যারে (12 উপাদান) - আপনি এখানে আপনার মেশিনে পরীক্ষা করতে পারেন
  • বড় অ্যারে (1 মিলিয়ন উপাদান) অ্যারে - আপনি এখানে আপনার মেশিনে পরীক্ষা করতে পারেন

এখানে চিত্র বর্ণনা লিখুন


6

জাভাস্ক্রিপ্ট দুটি মাত্রিক অ্যারে সমর্থন করে না, পরিবর্তে আমরা অন্য অ্যারের ভিতরে একটি অ্যারে সঞ্চয় করি এবং সেই অ্যারের কোন অবস্থানটি আপনি অ্যাক্সেস করতে চান তার উপর নির্ভর করে সেই অ্যারে থেকে ডেটা আনা হয়। মনে রাখবেন অ্যারের সংখ্যা ZERO থেকে শুরু হয় ।

কোড উদাহরণ:

/* Two dimensional array that's 5 x 5 

       C0 C1 C2 C3 C4 
    R0[1][1][1][1][1] 
    R1[1][1][1][1][1] 
    R2[1][1][1][1][1] 
    R3[1][1][1][1][1] 
    R4[1][1][1][1][1] 
*/

var row0 = [1,1,1,1,1],
    row1 = [1,1,1,1,1],
    row2 = [1,1,1,1,1],
    row3 = [1,1,1,1,1],
    row4 = [1,1,1,1,1];

var table = [row0,row1,row2,row3,row4];
console.log(table[0][0]); // Get the first item in the array

6

var playList = [
  ['I Did It My Way', 'Frank Sinatra'],
  ['Respect', 'Aretha Franklin'],
  ['Imagine', 'John Lennon'],
  ['Born to Run', 'Bruce Springsteen'],
  ['Louie Louie', 'The Kingsmen'],
  ['Maybellene', 'Chuck Berry']
];

function print(message) {
  document.write(message);
}

function printSongs( songs ) {
  var listHTML;
  listHTML = '<ol>';
  for ( var i = 0; i < songs.length; i += 1) {
    listHTML += '<li>' + songs[i][0] + ' by ' + songs[i][1] + '</li>';
  }
  listHTML += '</ol>';
  print(listHTML);
}

printSongs(playList);


6

ES6 +, ES2015 + আরও সহজ উপায়ে এটি করতে পারে


3 x 2 অ্যারে তৈরি করে সত্য

[...Array(3)].map(item => Array(2).fill(true))

আমার স্বীকারোক্তি করা দরকার আমি আপনার উত্তরটি "গ্রহণ" করেছি এবং আমার সাথে যুক্ত করেছি , ওয়ান-লাইনার সংগ্রহ।
আমার-

5

আমার প্রয়োজন অনুসারে এর সাথে "রেকর্ডস" যুক্ত করতে একটি নমনীয় অ্যারে ফাংশন তৈরি করতে হয়েছিল এবং সেগুলি আরও প্রসেসিংয়ের জন্য একটি ডাটাবেসে প্রেরণের আগে যাবতীয় গণনা এবং যা প্রয়োজন তা করতে সক্ষম হয়েছি। কোড এখানে, আশা করি এটি :)

function Add2List(clmn1, clmn2, clmn3) {
    aColumns.push(clmn1,clmn2,clmn3); // Creates array with "record"
    aLine.splice(aPos, 0,aColumns);  // Inserts new "record" at position aPos in main array
    aColumns = [];    // Resets temporary array
    aPos++ // Increments position not to overlap previous "records"
}

অপ্টিমাইজড এবং / অথবা কোনও বাগ চিহ্নিত করতে নির্দ্বিধায় :)


ঠিক কীভাবে aLine.push([clmn1, clmn2, clmn3]);?
পিম্প ট্রাইস্কিট

5

আমি একটি দ্বিমাত্রিক অ্যারে করতে একটি দ্রুত উপায় এখানে পেয়েছি।

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(e => Array(y));
}

আপনি সহজেই এই ফাংশনটিকে ES5 ফাংশনেও রূপান্তর করতে পারেন।

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(function(e) {
        return Array(y);
    });
}

কেন এটি কাজ করে: new Array(n)কনস্ট্রাক্টর একটি প্রোটোটাইপ দিয়ে একটি অবজেক্ট তৈরি করে Array.prototypeএবং তারপরে অবজেক্টের বরাদ্দ দেয় length, ফলস্বরূপ একটি অপ্রজনিত অ্যারে হয়। প্রকৃত সদস্যের অভাবের কারণে আমরা এতে Array.prototype.mapফাংশনটি পরিচালনা করতে পারি না ।

যাইহোক, আপনি যখন কনস্ট্রাক্টরের একাধিক যুক্তি সরবরাহ করেন যেমন আপনি যখন করেন তখন Array(1, 2, 3, 4)কনস্ট্রাক্টর argumentsঅবজেক্টটি কোনও Arrayঅবজেক্ট ইনস্ট্যান্ট করতে এবং সঠিকভাবে পপুলেট করতে ব্যবহার করবে ।

এই কারণে, আমরা ব্যবহার করতে পারি Array.apply(null, Array(x)), কারণ applyফাংশনটি কনস্ট্রাক্টারে আর্গুমেন্টগুলি ছড়িয়ে দেবে। স্পষ্টতার জন্য, Array.apply(null, Array(3))করা সমান Array(null, null, null)

এখন যেহেতু আমরা একটি প্রকৃত জনবহুল অ্যারে তৈরি করেছি, আমাদের mapকেবল দ্বিতীয় কলটি কল করে তৈরি করতে হবে y


5

একের নীচে একটি 5x5 ম্যাট্রিক্স তৈরি করে সেগুলি পূরণ করুন null

var md = [];
for(var i=0; i<5; i++) {
    md.push(new Array(5).fill(null));
}

console.log(md);


3
এই উত্তরটি ভুল। এটি তার স্লটগুলিতে একই অ্যারে পূরণ করে একটি অ্যারে তৈরি করবে। md[1][0] = 3 এবং বাকি সমস্ত উপাদানগুলিও আপডেট হয়
কিআং

5

সারি এবং কলাম একটি এর মাপ অ্যারের শুধুমাত্র এ পরিচিত রান টাইম তারপর পদ্ধতি অনুসরণ করে একটি তৈরি করার জন্য ব্যবহার করা যেতে পারে গতিশীল 2d অ্যারে

var num = '123456';
var row = 3; // Known at run time
var col = 2; // Known at run time
var i = 0;

var array2D = [[]];
for(var r = 0; r < row; ++r)
{
    array2D[r] = [];
    for(var c = 0; c < col; ++c)
    {
        array2D[r][c] = num[i++];
    }
}
console.log(array2D); 
// [[ '1', '2' ], 
//  [ '3', '4' ], 
//  [ '5', '6' ]]

console.log(array2D[2][1]); // 6

4

আরও একটি সমাধান রয়েছে, যা আপনাকে 2 ডি অ্যারের আকারটিকে পূর্বনির্ধারিত করতে বাধ্য করে না এবং এটি খুব সংক্ষিপ্ত।

var table = {}
table[[1,2]] = 3 // Notice the double [[ and ]]
console.log(table[[1,2]]) // -> 3

এটি কাজ করে কারণ, [1,2]একটি স্ট্রিংয়ে রূপান্তরিত হয়, যা বস্তুর জন্য স্ট্রিং কী হিসাবে ব্যবহৃত হয় table


এই উত্তরটিই আমাকে জাভা স্ক্রিপ্টের "বহু-মাত্রিক" অ্যারেগুলির সাথে জঞ্জাল করতে চায় না, এমনকি আমার কাছে খুব মার্জিত সমাধান রয়েছে his এটি আরও চিত্রিত করে যে অন্য সবাই আসলে বহুমাত্রিক অ্যারে তৈরি করে না J ঠিক মত জাভাস্ক্রিপ্টে একটি "অ্যারে"; এই উত্তরটি সম্পূর্ণরূপে একটি সিউডো-অনন্ত আকারের, সুনির্দিষ্ট আকার এবং বিষয়বস্তুগুলির সীমাহীন মাত্রার অ্যারে তৈরি করবে the সমস্ত অন্যান্য পুনরাবৃত্তি এবং লুপ ভিত্তিক উত্তরগুলি তারা যে অ্যারে কাঠামো তৈরি করতে পারে তার আকারের অনেক কম উপরের সীমা রয়েছে have এবং সৃষ্টিটি এই বৃহত্তর কাঠামোর জন্য গতি একটি বড় সমস্যা হবে।
পিম্প ট্রাইস্কিট

প্রাক-পূরণের অনুকরণের পরিবর্তে এই লাইনটি ব্যবহার করুন:var table = new Proxy({}, {get:(t,n)=>n in t ? t[n] : 42});
পিম্প ট্রাইজকিট

বস্তু দ্বারা অ্যারে 2 ডি 'অনুকরণ' করার দুর্দান্ত, সৃজনশীল উপায় :)
কামিল কিয়েসজেউস্কি

4

একটি 4x6 অ্যারে তৈরি করতে, কেবল এটি করুন

const x = [...Array(6)].map(elem => new Array(4))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.