অবজেক্টের অ্যারে ঘোষণা করা হচ্ছে


87

আমার একটি ভেরিয়েবল রয়েছে যা একটি অ্যারে এবং আমি অ্যারের প্রতিটি উপাদান ডিফল্টরূপে একটি বস্তু হিসাবে কাজ করতে চাই। এটি অর্জনের জন্য, আমি আমার কোডে এই জাতীয় কিছু করতে পারি।

var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();

এটি দুর্দান্ত কাজ করে তবে আমি কোনও সূচী নম্বর উল্লেখ করতে চাই না। আমি চাই আমার অ্যারের সমস্ত উপাদান একটি বস্তু হয়ে উঠুক। আমি কীভাবে এটি ঘোষণা করব বা শুরু করব?

var sample = new Array();
sample[] = new Object();

আমি উপরের কোডটি চেষ্টা করেছিলাম কিন্তু এটি কার্যকর হয় না। আমি কোনও সূচী নম্বর ব্যবহার না করে কীভাবে অবজেক্টের অ্যারে শুরু করব?


4
সুতরাং আপনি কি ডিফল্টরূপে সমস্ত অ্যারে আইটেমগুলি তৈরি করার চেষ্টা করছেন?
জেফ শেভর


আমি এরকম করার কোন লাভ দেখছি না। আপনি কেন এইভাবে এটি করতে চান তা বুঝতে পারলে বাস্তবে আপনার সমস্যাটি কীভাবে সমাধান করা যায় তা বুঝতে আমাদের সহায়তা করবে।
জেফ শেভর

4
জিনিসগুলিতে কী আছে? দেখে মনে হচ্ছে array.push(objYouWant )ফাংশনের অভ্যন্তরে বাস্তবায়ন করা অবশ্যই সমাধান হয়ে যাবে each প্রতিবার ফাংশনটি চালিত হওয়ার সাথে সাথে, এটি আপনার যা যা বৈশিষ্ট্য চায় তা যুক্ত করে একটি নতুন অবজেক্ট যুক্ত করে।
জেফ শেভর

4
এগুলি স্বয়ংক্রিয়ভাবে বস্তু হওয়া কীভাবে আপনার পরিস্থিতিকে সহায়তা করবে তা আমি দেখছি না।
জেফ শেভর

উত্তর:


90

array.push()অ্যারের শেষে একটি আইটেম যুক্ত করতে ব্যবহার করুন।

var sample = new Array();
sample.push(new Object());

এই nসময়টি করতে একটি forলুপ ব্যবহার করুন ।

var n = 100;
var sample = new Array();
for (var i = 0; i < n; i++)
    sample.push(new Object());

মনে রাখবেন যে, আপনার কাছে প্রতিস্থাপন করতে পারেন new Array()সঙ্গে []এবং new Object()সঙ্গে {}তাই এটি হয়ে:

var n = 100;
var sample = [];
for (var i = 0; i < n; i++)
    sample.push({});

38

ঘোষণার মাধ্যমে আপনি কী বোঝাতে চেয়েছেন তার উপর নির্ভর করে আপনি অ্যারে আক্ষরিক মধ্যে অবজেক্ট ল্যাটারালগুলি ব্যবহার করে দেখতে পারেন :

var sample = [{}, {}, {} /*, ... */];

সম্পাদনা: যদি আপনার লক্ষ্যটি এমন একটি অ্যারে হয় যার undefinedআইটেমগুলি ডিফল্টরূপে খালি অবজেক্ট আক্ষরিক হয়, আপনি একটি ছোট ইউটিলিটি ফাংশন লিখতে পারেন:

function getDefaultObjectAt(array, index)
{
    return array[index] = array[index] || {};
}

তারপরে এটি ব্যবহার করুন:

var sample = [];
var obj = getDefaultObjectAt(sample, 0);     // {} returned and stored at index 0.

অথবা এমনকি:

getDefaultObjectAt(sample, 1).prop = "val";  // { prop: "val" } stored at index 1.

অবশ্যই, এর রিটার্ন ভ্যালুতে সরাসরি অ্যাসাইনমেন্ট getDefaultObjectAt()কাজ করবে না, সুতরাং আপনি লিখতে পারবেন না:

getDefaultObjectAt(sample, 2) = { prop: "val" };

@ প্রসথকে, আপনি কী বোঝাতে চাইছেন যে আপনি আপনার অ্যারেটিকে গতিশীলভাবে آباد করছেন (যেমন লুপের মাধ্যমে)? তারপরে আপনার ড্যানিয়েলের উত্তর এবং ব্যবহার অনুসরণ করা উচিত push()
ফ্রেডেরিক হামিদী

@ প্রসথকে, এই ডাউনটা আমার নয়। যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনার প্রশ্নের অধীনে জেফ শেভারের মন্তব্যটি সঠিক?
ফ্রেডেরিক হামিদী

26

আপনি ফিল () ব্যবহার করতে পারেন ।

let arr = new Array(5).fill('lol');

let arr2 = new Array(5).fill({ test: 'a' });
// or if you want different objects
let arr3 = new Array(5).fill().map((_, i) => ({ id: i }));

5 টি আইটেমের অ্যারে তৈরি করবে। তারপরে আপনি উদাহরণের জন্য প্রতিটি জন্য ব্যবহার করতে পারেন।

arr.forEach(str => console.log(str));

মনে রাখবেন যে new Array(5)এটি করার সময় 5 টি দৈর্ঘ্যের একটি অবজেক্ট এবং অ্যারেটি খালি থাকে। আপনি যখন ব্যবহার করবেন তখন fill()প্রতিটি স্বতন্ত্র স্পট যা যা ইচ্ছা পূরণ করুন।


আপনি পোস্ট করার পরে ঠিক প্রথম পৃষ্ঠায় এটি দেখতে পেয়েছি। এটি আমার নজর কেড়েছে কারণ এটি একটি নতুন উত্তর সহ এমন পুরানো প্রশ্ন।
মেলপোমেন

আমি মনে করি এটি অন্যান্য উত্তরগুলির তুলনায় তুলনামূলকভাবে ব্যবহার করা এবং বুঝতে অসুবিধা।
শচীন শাহ

12

মন্তব্যগুলিতে আপনি কীভাবে প্রতিক্রিয়া জানিয়েছেন তা দেখার পরে। মনে হচ্ছে এটি pushঅন্যের পরামর্শ মতো ব্যবহার করা ভাল । এইভাবে আপনাকে সূচকগুলি জানতে হবে না তবে আপনি এখনও অ্যারেতে যুক্ত করতে পারেন।

var arr = [];
function funcInJsFile() {
    // Do Stuff
    var obj = {x: 54, y: 10};
    arr.push(obj);
}

এই ক্ষেত্রে, আপনি যখনই এই ফাংশনটি ব্যবহার করবেন, এটি অ্যারেতে একটি নতুন অবজেক্টকে ধাক্কা দেবে।


ওহ godশ্বর .. objects অবজেক্টগুলিতে আমার 100 টিরও বেশি ভেরিয়েবল রয়েছে এবং ফাংশনটির প্রতিটি বস্তু বা কলের জন্য আমাকে ফাংশনটি শুরু করার সময় কিছু ভেরিয়েবলের জন্য কিছু মান শুরু করতে হবে
প্রসথ কে

11

আপনার আর Objectকখনও ফাঁকা গুলি তৈরি করার দরকার নেই । আপনি তাদের সাথে কিছু করতে পারবেন না। প্রয়োজন অনুসারে কেবলমাত্র আপনার কাজের বস্তুগুলিকে নমুনায় যুক্ত করুন। ব্যবহারের pushড্যানিয়েল Imms হিসাবে প্রস্তাব, এবং ফ্রেডেরিক হামিদি হিসাবে ব্যবহারের লিটারেল সুপারিশ করেছে। আপনি জাভাস্ক্রিপ্ট সি এর মতো প্রোগ্রাম করতে চান বলে মনে হচ্ছে

var samples = []; /* If you have no data to put in yet. */
/* Later, probably in a callback method with computed data */
/* replacing the constants. */
samples.push(new Sample(1, 2, 3)); /* Assuming Sample is an object. */
/* or */
samples.push({id: 23, chemical: "NO2", ppm: 1.4}); /* Object literal. */

আমি বিশ্বাস করি new Array(10)10 টি undefinedউপাদান দিয়ে একটি অ্যারে তৈরি করে।


10

আপনি এই জাতীয় এক লাইনে "অবজেক্ট টাইপ" এর অ্যারে ইনস্ট্যান্ট করতে পারেন (কেবলমাত্র নতুন অবজেক্টটি () আপনার অবজেক্টের সাথে প্রতিস্থাপন করুন):

var elements = 1000;
var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });

4
আমি যদি উপাদানগুলির মূল্য জানি না?
প্রসথ কে

6

আচ্ছা array.lengthকৌতুক করা উচিত নাকি? এর মতো কিছু, আমি বোঝাতে চাইছি সূচিপত্রের সীমাটি যদি আপনার কেবল এটি পড়ে থাকে তবে আপনাকে জানার দরকার নেই ..

var arrayContainingObjects = [];
for (var i = 0; i < arrayContainingYourItems.length; i++){
    arrayContainingObjects.push {(property: arrayContainingYourItems[i])};
}

সম্ভবত আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পারি নি তবে আপনি আপনার অ্যারের দৈর্ঘ্যটি এইভাবে পেতে এবং সেগুলিকে বস্তুতে রূপান্তর করতে সক্ষম হবেন। ড্যানিয়েল ধরণের অনুরূপ একই উত্তর দিয়েছেন। আপনি কেবল তার অ্যারে-দৈর্ঘ্যটি তার পরিবর্তনশীলে সংরক্ষণ করতে পারেন এবং এটি হয়ে যাবে।

IF এবং এটি আমার মতে না হওয়া উচিত আপনি আপনার অ্যারে-দৈর্ঘ্য পেতে পারেন না। যেমন আপনি বলেছেন যে ডাব্লু / ও সূচক নম্বর পেয়েছেন আপনি এটি এটি করতে পারেন:

var arrayContainingObjects = [];
for (;;){
    try{
        arrayContainingObjects.push {(property: arrayContainingYourItems[i])};
    }
}
catch(err){
    break;
}

এটি উপরের সংস্করণটির দুর্দান্ত-সুন্দর সংস্করণ তবে সূচি সীমা থেকে "চালিত" না হওয়া পর্যন্ত লুপটি কার্যকর হবে ute


5

এটা চেষ্টা কর-

var arr = [];
arr.push({});

এটি কেবলমাত্র একটি উপাদানকে একটি বস্তুতে পরিণত করে .. আমি চাই আমার সমস্ত উপাদানই একটি বস্তু হয়ে
উঠুক

4
@ শুক্লস্নিধ্য্যা এই পোস্টটি এটি কী করে এবং কেন আপনি এটির সুপারিশ করেন তার ব্যাখ্যা নেই। ...কথা মাত্র.
মিকম্যাকুসা

5
//making array of book object
var books = [];
    var new_book = {id: "book1", name: "twilight", category: "Movies", price: 10};
    books.push(new_book);
    new_book = {id: "book2", name: "The_call", category: "Movies", price: 17};
    books.push(new_book);
    console.log(books[0].id);
    console.log(books[0].name);
    console.log(books[0].category);
    console.log(books[0].price);

// also we have array of albums
var albums = []    
    var new_album = {id: "album1", name: "Ahla w Ahla", category: "Music", price: 15};
    albums.push(new_album);
    new_album = {id: "album2", name: "El-leila", category: "Music", price: 29};
    albums.push(new_album);
//Now, content [0] contains all books & content[1] contains all albums
var content = [];
content.push(books);
content.push(albums);
var my_books = content[0];
var my_albums = content[1];
console.log(my_books[0].name);
console.log(my_books[1].name); 

console.log(my_albums[0].name);
console.log(my_albums[1].name); 

এই উদাহরণটি আমার সাথে কাজ করে। ব্রাউজার কনসোল আউটপুট জন্য স্ন্যাপশট


1

অ্যারের শেষে আইটেম যুক্ত করতে অ্যারে.পুশ () ব্যবহার করুন।

var sample = new Array();
sample.push(new Object());

তুমি এটা ব্যবহার করতে পারো

var x = 100;
var sample = [];
for(let i=0; i<x ;i++){
  sample.push({}) 
  OR
  sample.push(new Object())
}    

1

প্রত্যেকের জন্য ব্যবহার করে আমরা ইতিমধ্যে ডেটা থাকলে আমাদের ডেটাতে কিছু ব্যবসায়িক লগইন করতে চাইলে ডেটা সংরক্ষণ করতে পারি।

var sample = new Array();
var x = 10;
var sample = [1,2,3,4,5,6,7,8,9];
var data = [];

sample.forEach(function(item){
    data.push(item);
})

document.write(data);

লুপের জন্য সহজ ব্যবহার করে উদাহরণ

var data = [];
for(var i = 0 ; i < 10 ; i++){
   data.push(i);
}
document.write(data);

1

আপনি যদি অ্যারের অভ্যন্তরের সমস্ত উপাদানকে বস্তু হিসাবে রাখতে চান তবে আপনি অ্যারেতে প্রবেশের আগে জাভাস্ক্রিপ্ট প্রক্সি ব্যবহার করে অবজেক্টগুলিতে একটি বৈধতা প্রয়োগ করতে পারেন। এটি বেশ সহজ,

const arr = new Proxy(new Array(), {
  set(target, key, value) {
    if ((value !== null && typeof value === 'object') || key === 'length') {
      return Reflect.set(...arguments);
    } else {
      throw new Error('Only objects are allowed');
    }
  }
});

এখন আপনি যদি এই জাতীয় কিছু করার চেষ্টা করেন:

arr[0] = 'Hello World'; // Error

এটি একটি ত্রুটি নিক্ষেপ করবে। তবে আপনি যদি কোনও বস্তু sertোকান তবে এটি অনুমোদিত হবে:

arr[0] = {}; // Allowed

প্রক্সি সম্পর্কে আরও তথ্যের জন্য দয়া করে এই লিঙ্কটি দেখুন: https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / প্রক্সি

আপনি যদি কোনও পলিফিল বাস্তবায়ন খুঁজছেন তবে আপনি এই লিঙ্কটি চেকআউট করতে পারেন: https://github.com/GoogleChrome/proxy-polyfill


1

আমার প্রকল্পের নীচের কোডটি সম্ভবত এটি আপনার পক্ষে ভাল

  reCalculateDetailSummary(updateMode: boolean) {

    var summaryList: any = [];
    var list: any;
    if (updateMode) { list = this.state.pageParams.data.chargeDefinitionList }
    else {
        list = this.state.chargeDefinitionList;
    }

    list.forEach((item: any) => {
        if (summaryList == null || summaryList.length == 0) {
            var obj = {
                chargeClassification: item.classfication,
                totalChargeAmount: item.chargeAmount
            };
            summaryList.push(obj);

        } else {
            if (summaryList.find((x: any) => x.chargeClassification == item.classfication)) {
                summaryList.find((x: any) => x.chargeClassification == item.classfication)
                    .totalChargeAmount += item.chargeAmount;
            }
        }
    });

    if (summaryList != null && summaryList.length != 0) {
        summaryList.push({
            chargeClassification: 'Total',
            totalChargeAmount: summaryList.reduce((a: any, b: any) => a + b).totalChargeAmount
        })
    }

    this.setState({ detailSummaryList: summaryList });
}

1
const sample = [];
    list.forEach(element => {
      const item = {} as { name: string, description: string };
      item.name= element.name;
      item.description= element.description;
      sample.push(item);
    });
    return sample;

যে কেউ এটি চেষ্টা করে .. এবং কিছু প্রস্তাব দেয়।


-7
var ArrayofObjects = [{}]; //An empty array of objects.

4
না এটি একটি অবজেক্টের একটি খালি খালি অ্যারে ।
কোয়ান্টিন

স্ট্যাক ওভারফ্লোতে স্বাগতম! এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, যদিও সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না। আপনার কোডটি ব্যাখ্যামূলক মন্তব্যে ভিড় না করার চেষ্টা করুন, এটি কোড এবং ব্যাখ্যা উভয়ের পাঠযোগ্যতা হ্রাস করে!
কেয়েস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.