কোন অ্যারেতে কীভাবে একটি অবজেক্ট যুক্ত করা যায়


317

আমি কীভাবে একটি অ্যারেতে একটি বস্তু যুক্ত করতে পারি (জাভাস্ক্রিপ্ট বা jquery এ)? উদাহরণস্বরূপ, এই কোডটিতে সমস্যা কী?

function(){
    var a = new array();
    var b = new object();
    a[0]=b;
}

অ্যারেতে অবজেক্টটি ব্যবহার করতে আমি ফাংশন 1 এর অ্যারেতে অনেকগুলি বস্তু সংরক্ষণ করতে এই কোডটি ব্যবহার করতে চাই এবং ফাংশন 2 কল করি।

  1. আমি কীভাবে একটি অ্যারেতে কোনও বস্তু সংরক্ষণ করতে পারি?
  2. কীভাবে আমি একটি বস্তুকে একটি অ্যারেতে রেখে ভেরিয়েবলে সংরক্ষণ করতে পারি?

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

এছাড়াও, pushইতিমধ্যে এখানে একাধিকবার পরামর্শ দেওয়া হয়েছে। দয়া করে অন্য pushপরামর্শ দিয়ে এই থ্রেডটিকে আর দূষিত করবেন না ।
বোঘিয়ান হফম্যান

উত্তর:


630

অ্যারে.পুশ () ব্যবহার করে কোনও অ্যারেতে কিছু রাখুন।

var a=[], b={};
a.push(b);    
// a[0] === b;

অ্যারে সম্পর্কিত অতিরিক্ত তথ্য

একসাথে একাধিক আইটেম যুক্ত করুন

var x = ['a'];
x.push('b', 'c');
// x = ['a', 'b', 'c']

অ্যারের শুরুতে আইটেম যুক্ত করুন

var x = ['c', 'd'];
x.unshift('a', 'b');
// x = ['a', 'b', 'c', 'd']

অন্য একটি অ্যারের সামগ্রী যুক্ত করুন

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
x.push.apply(x, y);
// x = ['a', 'b', 'c', 'd', 'e', 'f']
// y = ['d', 'e', 'f']  (remains unchanged)

দুটি অ্যারের সামগ্রী থেকে একটি নতুন অ্যারে তৈরি করুন

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
var z = x.concat(y);
// x = ['a', 'b', 'c']  (remains unchanged)
// y = ['d', 'e', 'f']  (remains unchanged)
// z = ['a', 'b', 'c', 'd', 'e', 'f']

আমার একটি প্রশ্নও রয়েছে: myArray = []; myArray.push ({'পাঠ্য': 'কিছু পাঠ্য', 'আইডি': 13}); এবং এখন আমারআরাই খালি আছে। সুতরাং আমরা যদি মাইআরাই [0] ['পাঠ্য'] থেকে মানটি পাওয়ার চেষ্টা করি তবে এটি খালি হবে কেন? take.ms/jSvbn
fdrv

কিছু ঠিক মনে হচ্ছে না। কোনও স্কোপিং সমস্যা নেই তা নিশ্চিত করুন। মাইআরাই ঘোষণার জন্য লেট / ভার ব্যবহার করুন। কারণ MyArray.push সর্বদা আমারআরিকে পরিবর্তন করে দেবে।
জন স্ট্রিকলার

58
var years = [];
for (i= 2015;i<=2030;i=i+1)
{
years.push({operator : i})
}

এখানে অ্যারে বছর মত মান আছে

years[0]={operator:2015}
years[1]={operator:2016}

এটি এভাবে চলতে থাকে


55

প্রথমত, নেই objectবা আছে array। আছে Objectএবং Array। দ্বিতীয়ত, আপনি এটি করতে পারেন:

a = new Array();
b = new Object();
a[0] = b;

এখন এটির উপাদান হিসাবে aএকটি অ্যারে হবে b


4
কমপক্ষে অতি-জটিল উত্তরের জন্য +1। ওপি-র 2 প্রশ্নের উত্তর অন্তর্ভুক্ত করার জন্য আমি এটি নীচে প্রসারিত করেছি
স্যাম

30

ES6স্বরলিপি ব্যবহার করে আপনি এর মতো কিছু করতে পারেন:

সংযোজনের জন্য আপনি এইভাবে স্প্রেড অপারেটরটি ব্যবহার করতে পারেন :

var arr1 = [1,2,3]
var obj = 4
var newData = [...arr1, obj] // [1,2,3,4]
console.log(newData);


20
  • জাভাস্ক্রিপ্ট কেস-সংবেদনশীল । কল করা new array()এবং তারা উপস্থিত না new object()থাকায় একটি নিক্ষেপ করবে ReferenceError
  • ত্রুটি-প্রবণ আচরণেরnew Array() কারণে এড়ানো ভাল । পরিবর্তে, এর সাথে নতুন অ্যারে নির্ধারণ করুন । বস্তুর জন্য, ব্যবহার করুন ।
    = [val1, val2, val_n]= {}
  • অ্যারে বাড়ানোর ক্ষেত্রে অনেকগুলি উপায় রয়েছে (যোহানের উত্তরে দেখানো হয়েছে ) তবে সবচেয়ে নিরাপদ উপায়টি কেবল concatপরিবর্তে ব্যবহার করা হবে pushconcatআসল অ্যারেটিকে ছোঁয়া রেখে একটি নতুন অ্যারে প্রদান করে। pushকলিং অ্যারেটিকে রূপান্তর করে যা এড়ানো উচিত , বিশেষত যদি অ্যারেটি বিশ্বব্যাপী সংজ্ঞায়িত হয়।
  • অযৌক্তিক মিউটেশনগুলি এড়ানোর জন্য অবজেক্টের পাশাপাশি নতুন অ্যারে হিমায়িত করাও একটি ভাল অনুশীলন । হিমশীতল বস্তুটি পরিবর্তনীয় বা বর্ধমান (অগভীর) নয়।

এই পয়েন্টগুলি প্রয়োগ করে এবং আপনার দুটি প্রশ্নের উত্তর দিতে, আপনি এই জাতীয় ক্রিয়াটি সংজ্ঞায়িত করতে পারেন:

function appendObjTo(thatArray, newObj) {
  const frozenObj = Object.freeze(newObj);
  return Object.freeze(thatArray.concat(frozenObj));
}

ব্যবহার:

// Given
const myArray = ["A", "B"];
// "save it to a variable"
const newArray = appendObjTo(myArray, {hello: "world!"});
// returns: ["A", "B", {hello: "world!"}]. myArray did not change.

2
"ব্যবহার" এটাই আমার ব্যক্তিগত পছন্দসই উত্তর হয়ে গেছে।
এইচপিডাব্লুডি

@ বাঘিয়ান, আমি হিমশীতল এবং রূপান্তর সম্পর্কে আগ্রহী। আপনি কি অ্যারে পরিবর্তনের কথা বলছেন যা সরাসরি কনক্যাট পদ্ধতিটির কারণে ঘটতে পারে, বা কোনও '.ccat ()' সম্পাদন করার সময় স্ক্রিপ্টের অন্য কোথাও থেকে অ্যারেতে করা যেতে পারে? যদি দ্বিতীয়, জাভাস্ক্রিপ্ট একক থ্রেড হওয়ার কারণে এটি স্বয়ংক্রিয়ভাবে প্রতিরোধ করা উচিত নয়, এমনকি অ্যাসিনক্রোনাস কোডের ক্ষেত্রেও নিয়ন্ত্রণটি কমপক্ষে তাত্ত্বিকভাবে, পদ্ধতিটি শেষ না হওয়া পর্যন্ত ফেরত দেওয়া উচিত নয়?
jdmayfield

@jdmayfield: জেএস এর মূল্যায়ন কৌশল অবজেক্ট শেয়ারিং দ্বারা কল করা হয় । যখন বস্তুগুলি চারপাশে পাস করা হয়, সেগুলি অনুলিপি করা হয় না। এই অবজেক্টগুলির মধ্যে রূপান্তরগুলি চারপাশে পাস করার সময়, কলরদের কাছে সবসময় তত্ক্ষণাত্ দৃশ্যমান হয় নির্বিশেষে যে পরিবর্তককে অ্যাসিক্রোনালি বলা হয়েছিল, সম্পন্ন হয়েছে কি না। যেহেতু এই ধরনের পার্শ্ব প্রতিক্রিয়াগুলি প্রায়শই বাগের দিকে পরিচালিত করে, তাই আমরা আসলটি থেকে ডুপ্লুড হয়ে নতুন অবজেক্টটি ফিরিয়ে দিচ্ছি। অবজেক্টসকে অপরিবর্তনীয় (উদাহরণস্বরূপ freeze) তৈরি করা অনিচ্ছাকৃত পরিবর্তনকে রোধ করার জন্য কেবলমাত্র একটি অতিরিক্ত পদক্ষেপ।
বোঘইন হফম্যান

@ জেডমায়ফিল্ড: তবে আপনি যেমন ইতিমধ্যে অনুমান করতে পারেন, নতুন জিনিসগুলি তৈরি করার সময় প্রতিটি সময় বস্তুগুলি বিশাল হয়ে উঠলে দ্রুত অকার্যকর হয়ে উঠতে পারে। এই ধরনের ক্ষেত্রে, সহায়ক লিবস রয়েছে, যা মরি (কিন্ডা ডেড) এবং অনিয়মিত.জেএস এর মতো অবিরাম ডেটা স্ট্রাকচারের সুবিধা দিয়ে এটিকে দক্ষ করে তোলে । এখানে "কেন অপরিবর্তনশীলতা" এর একটি সংক্ষিপ্ত ভূমিকা এখানে দেওয়া হয়েছে: youtu.be/e-5obm1G_FY
বোঘইন হফম্যান

9

2 নম্বরের একটি উত্তর অন্তর্ভুক্ত করার জন্য গাবী পুরকারুর উত্তর প্রসারিত করা।

a = new Array();
b = new Object();
a[0] = b;

var c = a[0]; // c is now the object we inserted into a...

8

/* array literal */
var aData = [];

/* object constructur */
function Data(firstname, lastname) {
  this.firstname = firstname;
  this.lastname = lastname;
  this.fullname = function() {
    return (this.firstname + " " + this.lastname);
  };
}

/* store object into array */
aData[aData.length] = new Data("Java", "Script"); // aData[0]

aData.push(new Data("Jhon", "Doe"));
aData.push(new Data("Anna", "Smith"));
aData.push(new Data("Black", "Pearl"));

aData[aData.length] = new Data("stack", "overflow"); // aData[4]

/* loop arrray */
for (var x in aData) {
  alert(aData[x].fullname());
}

/* convert array of object into string json */
var jsonString = JSON.stringify(aData);
document.write(jsonString);


7

obejctস্পষ্টত একটি টাইপো। তবে উভয়ই objectএবং arrayমূলধনপত্রের প্রয়োজন।

আপনি সংক্ষিপ্ত হাত ব্যবহার করতে পারেন new Arrayএবং new Objectএগুলি হয় []এবং{}

আপনি অ্যারে ব্যবহার করে ডেটা পুশ করতে পারেন .push। এটি অ্যারের শেষে যুক্ত করে। অথবা আপনি ডেটা ধারণ করতে একটি সূচি সেট করতে পারেন।

function saveToArray() {
    var o = {};
    o.foo = 42;
    var arr = [];
    arr.push(o);
    return arr;
}

function other() {
    var arr = saveToArray();
    alert(arr[0]);
}

other();

5

অল্টারনেটিভ উত্তরটি হল এটি।

যদি আপনার মত থাকে এবং অ্যারে থাকে: var contacts = [bob, mary];

এবং আপনি এই অ্যারেতে অন্য অ্যারে রাখতে চান, আপনি এটি এইভাবে করতে পারেন:

ফাংশন নির্মাণকারী ঘোষণা করুন

function add (firstName,lastName,email,phoneNumber) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phoneNumber = phoneNumber;
}

ফাংশন থেকে বস্তু তৈরি:

var add1 = new add("Alba","Fas","Des@gmail.com","[098] 654365364");

এবং বস্তুকে অ্যারেতে যুক্ত করুন:

contacts[contacts.length] = add1;

3
a=[];
a.push(['b','c','d','e','f']);

6
হাই, তাই আপনাকে স্বাগতম। দয়া করে একটি উত্তর হিসাবে কোড ডাম্প করবেন না। আপনার চিন্তাভাবনাগুলি ব্যাখ্যা করুন যাতে ব্যবহারকারীরা কী চলছে তা ভালভাবে বুঝতে পারে। ধন্যবাদ।
চিতুলহু

2

অটো তালিকার মাধ্যমে আমি যেভাবে অবজেক্ট স্রষ্টাকে তৈরি করেছি:

var list = [];

function saveToArray(x) {
    list.push(x);
};

function newObject () {
    saveToArray(this);
};

0

আপনি যদি নিজের কোডটি এর মতো ব্যবহার করেন তবে আপনি একটি স্কপ সমস্যাতে চলেছেন। আপনি যদি এটিকে তাদের মধ্যে ব্যবহার করার পরিকল্পনা করেন (বা কল দিলে, এটি প্যারামিটার হিসাবে পাস করুন) তবে আপনাকে এটি ফাংশনগুলির বাইরে ঘোষণা করতে হবে।

var a = new Array();
var b = new Object();

function first() {
a.push(b);
// Alternatively, a[a.length] = b
// both methods work fine
}

function second() {
var c = a[0];
}

// code
first();
// more code
second();
// even more code
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.