সূচীকৃত সংগ্রহ

একটি সূচীকৃত সংগ্রহ একটি ডেটা কাঠামো যেখানে উপাদানগুলি সংখ্যাযুক্ত সূচী ব্যবহার করে সংরক্ষণ করা হয় এবং অ্যাক্সেস করা হয়। একটি সূচীকৃত সংগ্রহে সংরক্ষিত মানগুলি 0 থেকে শুরু করে সংখ্যাযুক্ত সূচী নির্ধারণ করা হয়, একটি প্যাটার্ন যাকে "শূন্য-সূচীকরণ" বলা হয়। তারপর আপনি তাদের সূচী উল্লেখ করে একটি সূচীকৃত সংগ্রহে সংরক্ষিত মানগুলি অ্যাক্সেস করতে পারেন।

একটি অ্যারে হল একটি ধারক যা জটিল বস্তু বা অন্যান্য অ্যারে সহ যেকোনো ডেটা টাইপের শূন্য বা তার বেশি মান ধারণ করতে পারে। একটি অ্যারেতে সংরক্ষিত মানগুলিকে কখনও কখনও অ্যারের "উপাদান" বলা হয়।

একটি অ্যারে তৈরি করুন

আদিম ডেটা টাইপের মতো, একটি অ্যারে তৈরি করার দুটি পদ্ধতি রয়েছে: একটি অ্যারে আক্ষরিক হিসাবে, বা জাভাস্ক্রিপ্টের অন্তর্নির্মিত Array() কনস্ট্রাক্টরকে new Array() দিয়ে ব্যবহার করে। একটি ভেরিয়েবলে একটি অ্যারে বরাদ্দ করা একটি একক শনাক্তকারীকে একাধিক মান বরাদ্দ করার জন্য একটি অত্যন্ত বহনযোগ্য এবং পুনরাবৃত্তিযোগ্য উপায় প্রদান করে।

অ্যারে আক্ষরিক সিনট্যাক্স শূন্য বা তার বেশি কমা দ্বারা পৃথক করা ডেটা মানগুলির চারপাশে বন্ধনী ( [] ) এর একটি সেট ব্যবহার করে:

const myArray = [];

অ্যারে কনস্ট্রাক্টর সিনট্যাক্স জাভাস্ক্রিপ্টের বিল্ট-ইন Array অবজেক্টকে new কীওয়ার্ড সহ কনস্ট্রাক্টর হিসাবে ব্যবহার করে:

const myArray = new Array();

উভয় অ্যারে আক্ষরিক এবং অ্যারে কনস্ট্রাক্টর সিনট্যাক্স আপনাকে একটি অ্যারে তৈরি করার সময় তথ্য সহ পপুলেট করতে দেয়, যদিও সিনট্যাক্সগুলি কীভাবে সেই মানগুলিকে সংজ্ঞায়িত করা হয় তাতে কিছুটা আলাদা। অ্যারে আক্ষরিক সিনট্যাক্স বন্ধনীর মধ্যে কমা-বিচ্ছিন্ন মান ব্যবহার করে, যা ফলস্বরূপ অ্যারের মতো দেখায়:

const myArray = [ true, null, "String", false ];

myArray;
> [ true, null, "String", false ]

অ্যারে কনস্ট্রাক্টর সিনট্যাক্স একটি বিশেষ আচরণগত ব্যতিক্রম সহ আর্গুমেন্ট হিসাবে কমা-বিচ্ছিন্ন মান গ্রহণ করে:

const myArray = new Array( true, null, "String", false );

myArray;
> Array(4) [ true, null, "String", false ]

যখন একটি একক সংখ্যাসূচক মান Array কনস্ট্রাক্টরে পাস করা হয়, তখন সেই মানটি ফলাফলের অ্যারেতে শূন্য অবস্থানে বরাদ্দ করা হয় না। পরিবর্তে, মানগুলির জন্য খালি স্লটের সংখ্যা দিয়ে একটি অ্যারে তৈরি করা হয়। এটি অ্যারের উপর কোন সীমাবদ্ধতা আরোপ করে না। আইটেম যোগ করা যেতে পারে এবং একটি অ্যারের আক্ষরিক সঙ্গে একই ভাবে এটি থেকে সরানো যেতে পারে.

// Firefox:\
const myArray = new Array( 10 );

myArray;
> Array(10) [ <10 empty slots> ]
// Chrome:
const myArray = new Array( 10 );

myArray;
> (10) [empty × 10]

খালি স্লট ধারণকারী অ্যারে (কখনও কখনও "স্পার্স অ্যারে" বলা হয়) বিশেষ ক্ষেত্রে। একটি undefined বা স্পষ্টভাবে null মান ধারণ করার পরিবর্তে, খালি স্লটগুলি প্রায়শই, তবে সবসময় নয়, ভাষার অন্য কোথাও undefined মান হিসাবে বিবেচিত হয়।

আপনি যখন অ্যারে আক্ষরিক তৈরি করেন তখন কমাগুলির মধ্যে একটি মান বাদ দিয়ে আপনি অ্যারে আক্ষরিক সিনট্যাক্স ব্যবহার করে একটি স্পার্স অ্যারে তৈরি করতে পারেন:

const myArray = [ true,, true, false ];

myArray;
> Array(4) [ true, <1 empty slot>, true, false ]

সমস্ত প্রসঙ্গে একটি অর্থপূর্ণ মান হিসাবে বিবেচিত না হওয়া সত্ত্বেও, একটি খালি স্লট অ্যারের মোট দৈর্ঘ্যে ফ্যাক্টর করা হয়, সম্ভাব্যভাবে অপ্রত্যাশিত ফলাফলের দিকে পরিচালিত করে যখন একটি অ্যারের মানগুলির উপর পুনরাবৃত্তি হয় :

const myArray = [ 1,, 3, 4 ];

myArray.length;
> 4

for( const myValue of myArray ) {
  console.log( myValue + 10 );
}
> 11
> NaN
> 13
> 14

এই আচরণটি জাভাস্ক্রিপ্টের প্রথম দিকের ডিজাইনের কিছু সিদ্ধান্ত থেকে একটি হোল্ডওভার। আধুনিক উন্নয়নে স্পার্স অ্যারে ব্যবহার করা এড়িয়ে চলুন।

আদিম হিসাবে, একটি অ্যারে আক্ষরিক তার সংশ্লিষ্ট কনস্ট্রাক্টর থেকে বৈশিষ্ট্য এবং পদ্ধতি উত্তরাধিকারসূত্রে পায় । যেহেতু একটি অ্যারে অবজেক্টের একটি বিশেষ ফর্ম, অ্যারে আক্ষরিক সিনট্যাক্স এবং new Array() সিনট্যাক্স কার্যকরীভাবে অভিন্ন ফলাফল তৈরি করে: একটি অবজেক্ট যা Array কনস্ট্রাক্টর থেকে তার প্রোটোটাইপ উত্তরাধিকারসূত্রে পায়।

const arrayLiteral = [];
const arrayConstructor = new Array();

typeof arrayLiteral;
> "object"

arrayLiteral;
> Array []
    length: 0
    <prototype>: Array []

typeof arrayConstructor;
> "object"

arrayConstructor;
> Array []
    length: 0
    <prototype>: Array []

যেহেতু দুটি ফলাফল অভিন্ন, এবং অ্যারের আক্ষরিক সিনট্যাক্স আরও সংক্ষিপ্ত এবং আক্ষরিক, আমরা দৃঢ়ভাবে new Array() সিনট্যাক্সের পরিবর্তে অ্যারে আক্ষরিক সিনট্যাক্স ব্যবহার করার পরামর্শ দিই।

অ্যারে মান অ্যাক্সেস করুন

আপনি বন্ধনী স্বরলিপি ব্যবহার করে অ্যারের ভিতরে পৃথক উপাদানগুলি অ্যাক্সেস করতে পারেন, অ্যারের অনুসরণ করে বন্ধনীর একটি সেট ( [] ) বা এর শনাক্তকারী যাতে সেই উপাদানটির সূচক উল্লেখ করে এমন একটি সংখ্যা রয়েছে:


[ "My string", "My other string" ][ 1 ];
> "My other string"

const myArray = [ "My string", 50, true ];

myArray[ 0 ];
> "My string"

myArray[ 1 ];
> 50

myArray[ 2 ];
> true

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

const myArray = [ "My string", 50, true ];

myArray[ 2 ];
> true

myArray[ "2" ];
> true

অ্যারেতে সংজ্ঞায়িত এর বাইরে একটি উপাদান অ্যাক্সেস করার চেষ্টা করার ফলে undefined হয়, একটি ত্রুটি নয়:

const myArray = [ "My string", 50, true ];

myArray[ 9 ];
> undefined

ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট

ডিস্ট্রাকচারিং অ্যাসাইনমেন্ট হল অ্যারে বা অবজেক্ট থেকে মানগুলির একটি পরিসর বের করার এবং শনাক্তকারীর একটি সেটে তাদের বরাদ্দ করার একটি সংক্ষিপ্ত উপায়, একটি প্রক্রিয়া যা কখনও কখনও মূল ডেটা স্ট্রাকচারকে "আনপ্যাকিং" বলা হয়, যদিও এটি মূল অ্যারে বা অবজেক্টকে পরিবর্তন করে না।

ডিস্ট্রাকচারিং অ্যাসাইনমেন্ট মানগুলির ট্র্যাক রাখতে শনাক্তকারীর একটি অ্যারে- বা বস্তুর মতো তালিকা ব্যবহার করে। এর সহজতম ফর্মে, যাকে বাইন্ডিং প্যাটার্ন ডেস্ট্রাকচারিং বলা হয়, প্রতিটি মান অ্যারে বা অবজেক্ট থেকে আনপ্যাক করা হয় এবং একটি সংশ্লিষ্ট ভেরিয়েবলের সাথে বরাদ্দ করা হয়, let বা const (বা var ) ব্যবহার করে আরম্ভ করা হয় :

const myArray = [ "A string", "A second string" ];
const [ myFirstElement, mySecondElement ] = myArray;

const myObject = { firstValue: false, secondValue: true };
const { myProp, mySecondProp } = myObject;

myFirstElement;
> "My string"

mySecondElement;
> "Second string"

myProp;
> false

mySecondProp;
> true

একটি বস্তুকে ধ্বংস করতে কোঁকড়া বন্ধনী ( {} ) এবং একটি বিন্যাস ধ্বংস করতে বর্গাকার বন্ধনী ( [] ) ব্যবহার করুন।

const myArray = [ false, true ];
const myObject = { firstValue: false, secondValue: true };

const [ myProp, mySecondProp ] = myObject;
> Uncaught TypeError: myObject is not iterable

const { myElement, mySecondElement } = myArray;

myElement
> undefined

mySecondElement;
> undefined

একটি অ্যারেকে ধ্বংস করা বাম থেকে ডানে ক্রমানুসারে ঘটে। ডেস্ট্রাকচারিং অ্যাসাইনমেন্টের প্রতিটি শনাক্তকারী একই সূচক সহ অ্যারের উপাদানের সাথে মিলে যায়:

const myArray = [ 1, 2, 3 ];
const [ myElement, mySecondElement, myThirdElement ] = myArray;

myElement;
> 1

mySecondElement;
> 2

myThirdElement;
> 3

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

const myObject = { firstValue: 1, secondValue: 2, thirdValue 3 };
const { secondValue, thirdValue, firstValue } = myObject;

firstValue;
> 1

secondValue;
> 2

thirdValue;
> 3

একটি শনাক্তকারী বাদ দিয়ে উপাদানগুলি এড়ানো যেতে পারে:

const myArray = [ 1, 2, 3 ];
const [ firstValue,, secondValue ] = myArray;

firstValue;
> 1

secondValue;
> 3

ডিস্ট্রাকচারিং সিনট্যাক্স আপনাকে ডিফল্ট মান নির্ধারণ করতে দেয় যদি একটি ধ্বংসকৃত মান হয় একটি খালি স্লট হয়, যেমন একটি স্পার্স অ্যারের ক্ষেত্রে, বা একটি undefined মান।

const myArray = [ true, ];
const [ firstValue = "Default string.", secondValue = "Default string." ] = myArray;

firstValue;
> true

secondValue;
> "Default string."

Deconstruction নির্দিষ্ট ধরনের মান জোর করে না. এর মানে হল যে "মিথ্যা" মানগুলি, যেমন খালি স্ট্রিং ( "" ) বা null , এখনও অর্থপূর্ণ বিনির্মাণ করা মান হিসাবে বিবেচিত হয়:

const myArray = [ false, null, 0, "",, undefined ];
const [ falseValue = true, nullValue = true, zeroValue = true, emptyStringValue = true, emptySlot = true, undefinedValue = true ] = myArray;

falseValue;
> false;

nullValue;
> null

zeroValue;
> 0

emptyStringValue;
> ""

emptySlot;
> true

undefinedValue;
> true

স্প্রেড অপারেটর

স্প্রেড অপারেটর ( ... ) ব্যবহার করুন, ES6-এ প্রবর্তিত একটি পুনরাবৃত্তিযোগ্য ডেটা স্ট্রাকচার যেমন একটি অ্যারে, স্ট্রিং বা বস্তুর আক্ষরিক পৃথক উপাদানগুলিতে প্রসারিত করতে। স্প্রেড অপারেটর অবিলম্বে প্রসারিত করা ডাটা স্ট্রাকচার বা সেই ডাটা স্ট্রাকচার ধারণকারী ভেরিয়েবলের আইডেন্টিফায়ার দ্বারা অনুসরণ করা হয়।

const myArray = [ 1, 2, 3 ];

console.log( ...myArray );
> 1 2 3

স্প্রেড সিনট্যাক্স প্রাথমিকভাবে অ্যারে কপি এবং একত্রিত করতে ব্যবহৃত হয়:

const myArray = [ 4, 5, 6 ];
const mySecondArray = [1, 2, 3, ...myArray ];

mySecondArray;
> Array(6) [ 1, 2, 3, 4, 5, 6 ]

আপনি শুধুমাত্র নিম্নলিখিত প্রসঙ্গে স্প্রেড সিনট্যাক্স ব্যবহার করতে পারেন:

অ্যারে এবং স্ট্রিংগুলির জন্য, স্প্রেড সিনট্যাক্স শুধুমাত্র তখনই প্রযোজ্য যেখানে একটি ফাংশন কলে শূন্য বা তার বেশি আর্গুমেন্ট বা অ্যারের উপাদানগুলি প্রত্যাশিত হয়। এই বিভাগে স্প্রেড অপারেটর সিনট্যাক্সের প্রথম উদাহরণটি কাজ করে কারণ এটি বিল্ট-ইন console.log পদ্ধতিতে একটি যুক্তি হিসাবে ...myArray পাস করে।

উদাহরণস্বরূপ, আপনি অন্য অ্যারের বাইরে একটি ভেরিয়েবলে ছড়িয়ে দেওয়া ডেটা বরাদ্দ করতে পারবেন না:

const myArray = [ 1, 2, 3 ];
const spreadVariable = ...myArray;
> Uncaught SyntaxError: Unexpected token '...'

কিন্তু আপনি মূল অ্যারেকে একটি অ্যারের আক্ষরিক মধ্যে ছড়িয়ে দিয়ে একটি অ্যারে অনুলিপি করেন:

const myArray = [ 1, 2, 3 ];
const spreadArray = [ ...myArray ];

spreadArray;
> Array(3) [ 1, 2, 3 ]

একটি একক অ্যারেতে দুই বা ততোধিক অ্যারে তৈরি করে এমন উপাদানগুলিকে একত্রিত করতে:

const myArray = [ 1, 2, 3 ];
const mySecondArray = [ 4, 5, 6 ];
const myNewArray = [ ...myArray, ...mySecondArray ];

myNewArray;
> Array(6) [ 1, 2, 3, 4, 5, 6 ]

অথবা একটি ফাংশন কলে পৃথক আর্গুমেন্ট হিসাবে একটি অ্যারের উপাদানগুলি পাস করতে:

const myArray = [ true, false ];
const myFunction = ( myArgument, mySecondArgument ) => {
    console.log( myArgument, mySecondArgument );
};

myFunction( ...myArray );
> true false

স্প্রেড অপারেটরকে ES2018-এ অবজেক্ট লিটারালের সাথে কাজ করার জন্য প্রসারিত করা হয়েছিল। অ্যারের মতো, আপনি স্প্রেড অপারেটর ব্যবহার করতে পারেন বস্তুর নকল বা মার্জ করতে:

const myObj = { myProperty : true };
const mySecondObj = { ...myObj };

mySecondObj;
> Object { myProperty: true }
const myFirstObj = { myProperty : true };
const mySecondObj = { additionalProperty : true };
const myMergedObj = { ...myFirstObj, ...mySecondObj };

myMergedObj;
> Object { myProperty: true, additionalProperty: true }

স্প্রেড অপারেটর "অগভীর" কপি তৈরি করে। এর মানে এটি মূল বস্তুর প্রোটোটাইপ এবং অ-গণনাযোগ্য বৈশিষ্ট্য অনুলিপি করে না।

const myCustomPrototype = { protoProp: "My prototype." };
const myObj = Object.create( myCustomPrototype, {
    myEnumerableProp: {
        value: true,
        enumerable: true
    },
    myNonEnumerableProp: {
        value: false,
        enumerable: false
    }
});
const myNewObj = { ...myObj };

myObj;
> Object { myEnumerableProp: true,  }
    myEnumerableProp: true
    myNonEnumerableProp: false
    <prototype>: Object { protoProp: "My prototype." }

myNewObj;
> Object { myEnumerableProp: true }
    myEnumerableProp: true
    <prototype>: Object {  }

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

বিশ্রাম অপারেটর

যদিও অপারেটরের সিনট্যাক্স নিজেই একই, বাকি অপারেটর ( ... ) এটি যে প্রেক্ষাপটে ব্যবহৃত হয়েছে তার উপর ভিত্তি করে বিপরীত ফাংশন সম্পাদন করে। একটি পুনরাবৃত্তিযোগ্য ডেটা স্ট্রাকচারকে স্বতন্ত্র উপাদানে প্রসারিত করার পরিবর্তে, যেমনটি ডেস্ট্রাকচারিং অ্যাসাইনমেন্টে বা যেমন করে। একটি ফাংশন পরামিতি , বাকি অপারেটর উপাদানগুলিকে একটি পুনরাবৃত্তিযোগ্য ডেটা কাঠামোতে একত্রিত করে। নামটি এই সত্য থেকে এসেছে যে এটি ডেটা মানগুলির একটি সেটের "বাকি অংশ" সংগ্রহ করতে ব্যবহৃত হয়।

যখন ডিস্ট্রাকচারিং অ্যাসাইনমেন্টের সাথে ব্যবহার করা হয়, তখন সিনট্যাক্সকে "বিশ্রাম সম্পত্তি" সিনট্যাক্স বলা হয়।

const myArray = [ "First", "Second", "Third", "Fourth", "Fifth" ];

[ myFirstElement, mySecondElement, ...remainingElements ] = myArray;

myFirstElement;
> "First"

mySecondElement;
> "Second"

remainingElements;
> Array(3) [ "Third", "Fourth", "Fifth"]

যখন একটি ফাংশনে একটি অনির্দিষ্ট সংখ্যক আর্গুমেন্ট প্রদান করতে ব্যবহৃত হয়, তখন সিনট্যাক্সকে "বিশ্রাম প্যারামিটার" সিনট্যাক্স বলা হয়:

function myFunction( ...myParameters ) {
    let result = 0;
    myParameters.forEach( ( myParam ) => {
        result += myParam;
    });
    return result;
};

myFunction( 2, 2 );
> 4

myFunction( 1, 1, 1, 10, 5 );
> 18

myFunction( 10, 11, 25 );
> 46

%TypedArray%

টাইপ করা অ্যারেগুলি হল একটি ES6 বৈশিষ্ট্য যা কাঠামোগত বাইনারি ডেটা সংরক্ষণ করার জন্য ডিজাইন করা হয়েছে, উদাহরণস্বরূপ আপলোড করা ফাইল বা WebGL এর সাথে কাজ করার সময়।

চিহ্নগুলির মতো, %TypedArray% অভ্যন্তরীণ ফাংশন (সাধারণত হয় %TypedArray% বা @@TypedArray হিসাবে নথিভুক্ত করা হয় তাই এটি একটি বিশ্ব সম্পত্তি হিসাবে ভুল করা যায় না) প্রচলিত অর্থে একটি কনস্ট্রাক্টর ফাংশন নয়, এবং আপনি তা করতে পারবেন না। এটিকে new দিয়ে ডাকুন বা সরাসরি কল করুন। পরিবর্তে, %TypedArray% পৃথক কনস্ট্রাক্টরগুলির একটি প্যারেন্ট সুপারক্লাসকে বোঝায়, যার প্রতিটি একটি নির্দিষ্ট বাইনারি ডেটা বিন্যাসের সাথে কাজ করে। অভ্যন্তরীণ %TypedArray% সুপারক্লাস বৈশিষ্ট্য এবং ইউটিলিটি পদ্ধতি প্রদান করে যা সমস্ত %TypedArray% কনস্ট্রাক্টর সাবক্লাস এবং তাদের দৃষ্টান্ত উত্তরাধিকারসূত্রে পাওয়া যায়।

আপনার উপলব্ধি পরীক্ষা করুন

প্রদত্ত `const myArray = [ 30, 50, 70];` `myArray[1]` কী ফেরত দেয়?

50
70
30

যদি `myArray` এর তিনটি মান থাকে, তাহলে `myArray[9]` কী ফেরত দেয়?

9
একটি ত্রুটি বার্তা
Null
Undefined