কীভাবে অ্যারেগুলিকে সম্বলিত অ্যারে থেকে লুপ করবেন এবং তাদের বৈশিষ্ট্য অ্যাক্সেস করবেন


184

আমি একটি অ্যারেতে থাকা অবজেক্টগুলিকে চক্র করতে এবং প্রতিটিটির বৈশিষ্ট্য পরিবর্তন করতে চাই। আমি যদি এটি করি:

for (var j = 0; j < myArray.length; j++){

console.log(myArray[j]);

}

কনসোলটি অ্যারের প্রতিটি বস্তু নিয়ে আসা উচিত, তাই না? তবে বাস্তবে এটি কেবল প্রথম বস্তুটি প্রদর্শন করে। যদি আমি লুপের বাইরে অ্যারে লগ করে কনসোল করি তবে সমস্ত বস্তু উপস্থিত হবে যাতে সেখানে অবশ্যই আরও কিছু আছে।

যাইহোক, এখানে পরবর্তী সমস্যা। আমি কীভাবে অ্যাক্সেস করব, উদাহরণস্বরূপ অ্যারেতে Object1.x, লুপটি ব্যবহার করে?

for (var j = 0; j < myArray.length; j++){

console.log(myArray[j.x]);

}

এটি "অপরিবর্তিত" ফিরে আসে। আবার লুপের বাইরে কনসোল লগ আমাকে জানায় যে সমস্ত বস্তুর "x" এর মান রয়েছে। আমি লুপে এই বৈশিষ্ট্যগুলি অ্যাক্সেস করব কীভাবে?

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

ধন্যবাদ!


2
আপনি কি আপনার অ্যারের নমুনা পোস্ট করতে পারেন? প্রথম কোড স্নিপেট সঠিক বলে মনে হচ্ছে।
সিরকো

jএকটি সংখ্যা আপনি আপনার লুপের শীর্ষে এটি সংজ্ঞায়িত করেছেন।

2
হয়তো myArrayসত্যিই সব পরে শুধু একটি অ্যারের নয় ??
টেকফুবার

আমাদের
আ্যরআর

নিম্নলিখিত সমস্ত উত্তর এবং স্বীকৃত উত্তর থাকা সত্ত্বেও সমস্যাটি কেন ঘটে এবং লুপের সাহায্যে কীভাবে সমাধান করা যায় তা কেউ ব্যাখ্যা করে না। #forEachকাজ করে। তবে প্রশ্নটি ছিল লুপ সম্পর্কে।
ফ্রিলাইটম্যান

উত্তর:


338

এর জন্য প্রতিটি বিল্ট-ইন অ্যারে ফাংশনটি ব্যবহার করুন। Array.forEach():

yourArray.forEach(function (arrayItem) {
    var x = arrayItem.prop1 + 2;
    console.log(x);
});

2
সাহায্য করতে পেরে খুশি .. জাভাস্ক্রিপ্টটি বেশ দুর্দান্ত হয়ে উঠছে .. জটিল লুপগুলি পড়ার জন্য প্রতিটিটি অনেক বেশি ভাল এবং সহজ ..
ডোরি সিডন

3
আমি ভয় করি যে এটি forEachআই 9 তে সমর্থিত নয় আমাকে দোষ দেবেন না! আমার নিয়োগকর্তা পণ্য যে সমর্থন দেয়!
ফ্যাটকপ

1
@ ডরিজিডন: প্রত্যেকটি বিরতি বা থামাতে সমর্থন করে না - বিকাশকারী.মোজিলা.আর
অঙ্কুর লরিয়া

2
মনে রাখবেন যে আপনার কাছে সত্যই অ্যারে থাকা জরুরী। আপনি যদি yourArrayএমন কিছু থেকে পান document.getElementsByClassNameতবে কোনও অ্যারে নয়, এটি এইচটিএমএল সংগ্রহ হতে হবে। তাহলে এই প্রশ্নটি সহায়ক হতে পারে।
জেএএনএনএমএম

দ্রষ্টব্য: forEachব্লক করা হচ্ছে এবং সমর্থন করে না awaitfor...ofলুপটি করবে।
আলুফর্মার

102

কিছু জাভাস্ক্রিপ্টে ক্রিয়ামূলক প্রোগ্রামিং পদ্ধতিতে একটি অ্যারের মাধ্যমে লুপিংয়ের ক্ষেত্রে ব্যবহার করে:

1. শুধু একটি অ্যারের মাধ্যমে লুপ

const myArray = [{x:100}, {x:200}, {x:300}];

myArray.forEach((element, index, array) => {
    console.log(element.x); // 100, 200, 300
    console.log(index); // 0, 1, 2
    console.log(array); // same myArray object 3 times
});

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

2. অ্যারেতে থাকা উপাদানগুলির মধ্যে কোনও একটি পরীক্ষায় পাস করেছে কিনা তা পরীক্ষা করুন

const people = [
    {name: 'John', age: 23}, 
    {name: 'Andrew', age: 3}, 
    {name: 'Peter', age: 8}, 
    {name: 'Hanna', age: 14}, 
    {name: 'Adam', age: 37}];

const anyAdult = people.some(person => person.age >= 18);
console.log(anyAdult); // true

3. একটি নতুন অ্যারে রূপান্তর

const myArray = [{x:100}, {x:200}, {x:300}];

const newArray= myArray.map(element => element.x);
console.log(newArray); // [100, 200, 300]

দ্রষ্টব্য: মানচিত্র () পদ্ধতি কলিং অ্যারেতে প্রতিটি উপাদানগুলিতে সরবরাহ করা ফাংশন কল করার ফলাফল সহ একটি নতুন অ্যারে তৈরি করে।

৪. একটি নির্দিষ্ট সম্পত্তি যোগফল এবং তার গড় গণনা করুন

const myArray = [{x:100}, {x:200}, {x:300}];

const sum = myArray.map(element => element.x).reduce((a, b) => a + b, 0);
console.log(sum); // 600 = 0 + 100 + 200 + 300

const average = sum / myArray.length;
console.log(average); // 200

৫. মূলের উপর ভিত্তি করে তবে এটিকে পরিবর্তন না করেই নতুন অ্যারে তৈরি করুন

const myArray = [{x:100}, {x:200}, {x:300}];

const newArray= myArray.map(element => {
    return {
        ...element,
        x: element.x * 2
    };
});

console.log(myArray); // [100, 200, 300]
console.log(newArray); // [200, 400, 600]

Each. প্রতিটি বিভাগের সংখ্যা গণনা করুন

const people = [
    {name: 'John', group: 'A'}, 
    {name: 'Andrew', group: 'C'}, 
    {name: 'Peter', group: 'A'}, 
    {name: 'James', group: 'B'}, 
    {name: 'Hanna', group: 'A'}, 
    {name: 'Adam', group: 'B'}];

const groupInfo = people.reduce((groups, person) => {
    const {A = 0, B = 0, C = 0} = groups;
    if (person.group === 'A') {
        return {...groups, A: A + 1};
    } else if (person.group === 'B') {
        return {...groups, B: B + 1};
    } else {
        return {...groups, C: C + 1};
    }
}, {});

console.log(groupInfo); // {A: 3, C: 1, B: 2}

Particular. নির্দিষ্ট মানদণ্ডের ভিত্তিতে একটি অ্যারের একটি উপসেট পুনরুদ্ধার করুন

const myArray = [{x:100}, {x:200}, {x:300}];

const newArray = myArray.filter(element => element.x > 250);
console.log(newArray); // [{x:300}] 

দ্রষ্টব্য: ফিল্টার () পদ্ধতিটি এমন সমস্ত উপাদান দিয়ে একটি নতুন অ্যারে তৈরি করে যা প্রদত্ত ফাংশন দ্বারা প্রয়োগ করা পরীক্ষায় পাস করে।

8. একটি অ্যারে বাছাই করুন

const people = [
  { name: "John", age: 21 },
  { name: "Peter", age: 31 },
  { name: "Andrew", age: 29 },
  { name: "Thomas", age: 25 }
];

let sortByAge = people.sort(function (p1, p2) {
  return p1.age - p2.age;
});

console.log(sortByAge);

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

9. একটি অ্যারেতে একটি উপাদান সন্ধান করুন

const people = [ {name: "john", age:23},
                {name: "john", age:43},
                {name: "jim", age:101},
                {name: "bob", age:67} ];

const john = people.find(person => person.name === 'john');
console.log(john);

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

অ্যারে.প্রোটোটাইপ.ফাইন্ড () পদ্ধতিটি অ্যারেতে প্রথম উপাদানটির মান প্রদান করে যা সরবরাহিত পরীক্ষামূলক ক্রিয়াকে সন্তুষ্ট করে।

তথ্যসূত্র


1
এটি একটি দুর্দান্ত রেফারেন্স - এটি এই প্রশ্নের মূল বা আপনার অন্য কোথাও হোস্ট করা এর মতো কিছু আছে?
সালভাতোর

খুব ভালভাবে ব্যাখ্যা এবং পুরো উত্তর, অবদান রাখার জন্য আপনাকে ধন্যবাদ।
এরিকা সামার

হাই, আমি যদি সমস্ত নামটি দেখাতে এবং তারপরে তুলনা করতে চাই, আপনি কীভাবে এটি করতে জানেন?
dipgirl

@ ডিপগার্ল, এটি কি নীচের মতো কিছু? const people = [ {name: "john", age:23}, {name: "john", age:43}, {name: "jim", age:101}, {name: "bob", age:67} ]; const sortByAge = people.map(p => { console.log(p.name) return p }).sort(function (p1, p2) { return p1.age - p2.age; }); console.log(sortByAge);
ইউসি


44

আপনি অবজেক্টের অ্যারের উপরে লুপ করতে একটি for..of লুপ ব্যবহার করতে পারেন ।

for (let item of items) {
    console.log(item); // Will display contents of the object inside the array
}

for..ofলুপগুলির সম্পর্কে সেরা জিনিসগুলির মধ্যে একটি হ'ল তারা কেবল অ্যারে ছাড়াও পুনরাবৃত্তি করতে পারে। আপনি মানচিত্র এবং অবজেক্ট সহ যে কোনও ধরণের পুনরাবৃত্ত হতে পারেন। আপনার যদি পুরানো ব্রাউজারগুলি সমর্থন করার প্রয়োজন হয় তবে আপনি ট্রান্সপ্লেলার বা টাইপস্ক্রিপ্টের মতো কিছু ব্যবহার করেছেন তা নিশ্চিত করুন।

যদি আপনি কোনও মানচিত্রের উপরে পুনরাবৃত্তি করতে চান, সিনট্যাক্সটি মূলত উপরের মত একই, এটি কী এবং মান উভয়ই পরিচালনা করে।

for (const [key, value] of items) {
  console.log(value);
}

আমি for..ofজাভাস্ক্রিপ্টে প্রতিটি ধরণের পুনরাবৃত্তির জন্য লুপগুলি ব্যবহার করি। তদ্ব্যতীত, দুর্দান্ত জিনিসগুলির মধ্যে একটি হ'ল তারা এ্যাসএনসি / এছাড়াও অপেক্ষায়ও কাজ করে।



18

আপনি এটি কীভাবে করতে পারেন তার একটি উদাহরণ এখানে দেওয়া হয়েছে :)

var students = [{
    name: "Mike",
    track: "track-a",
    achievements: 23,
    points: 400,
  },
  {
    name: "james",
    track: "track-a",
    achievements: 2,
    points: 21,
  },
]

students.forEach(myFunction);

function myFunction(item, index) {
  for (var key in item) {
    console.log(item[key])
  }
}


আপনি কীভাবে trackপ্রতিটি উপাদানটির জন্য সম্পত্তিটির মূল্য পাবেন এবং কোডের অন্য অংশে ব্যবহার বা ইন্টারপোলেট করার জন্য এটি একটি ভেরিয়েবলকে অর্পণ করবেন?
ক্রিস

7

একটি অ্যারের অবজেক্টের মধ্য দিয়ে লুপিং একটি বেশ মৌলিক কার্যকারিতা। এটি আমার জন্য কাজ করে কি না।

var person = [];
person[0] = {
  firstName: "John",
  lastName: "Doe",
  age: 60
};

var i, item;

for (i = 0; i < person.length; i++) {
  for (item in person[i]) {
    document.write(item + ": " + person[i][item] + "<br>");
  }
}


6

myArray[j.x] যুক্তিযুক্তভাবে ভুল।

(myArray[j].x);পরিবর্তে ব্যবহার করুন

for (var j = 0; j < myArray.length; j++){
  console.log(myArray[j].x);
}

@ সাইবার্গক্সএক্স ওহ .. আমার অর্থ jx একটি পরিবর্তনশীল নাম হিসাবে বিবেচিত হয় যা ভুল।
বিবেক সাধ সাধু

5

ES5 + সাল থেকে forEach পদ্ধতি ব্যবহার করে এটি সত্যিই সহজ। আপনি সরাসরি আপনার অ্যারেতে প্রতিটি বস্তুর প্রতিটি সম্পত্তি পরিবর্তন করতে পারেন।

myArray.forEach(function (arrayElem){ 
  arrayElem = newPropertyValue;
});

আপনি যদি প্রতিটি বস্তুর একটি নির্দিষ্ট সম্পত্তি অ্যাক্সেস করতে চান:

myArray.forEach(function (arrayElem){ 
      arrayElem.nameOfYourProperty = newPropertyValue;
    });

4

এখানে বস্তুর অ্যারের মাধ্যমে পুনরাবৃত্তি করার অন্য একটি উপায় রয়েছে (এগুলির জন্য আপনাকে আপনার ডকুমেন্টে jQuery লাইব্রেরি অন্তর্ভুক্ত করতে হবে)।

$.each(array, function(element) {
  // do some operations with each element... 
});

1
আপনার উত্তরটি $.eachপদ্ধতি ব্যবহার করার জন্য jQuery লাইব্রেরি লোড করার প্রয়োজনীয়তা সম্পর্কে সমালোচনা তথ্য হারিয়েছে ।
ম্যাথিউ মোরেক 17'15

4

এটি কাজ করবে। পুঙ্খানুপুঙ্খ অ্যারে (আপনার অ্যারে) লুপিং। তারপরে প্রতিটি বস্তুর প্রত্যক্ষ বৈশিষ্ট্যগুলির মধ্যে লুপ করুন (EveryObj)।

yourArray.forEach( function (eachObj){
    for (var key in eachObj) {
        if (eachObj.hasOwnProperty(key)){
           console.log(key,eachObj[key]);
        }
    }
});

2

অ্যারে অবজেক্ট পুনরাবৃত্তি, jQuery ব্যবহার করে (স্ট্রিং মুদ্রণের জন্য দ্বিতীয় প্যারামিটার ব্যবহার করুন)।

$.each(array, function(index, item) {
       console.log(index, item);
});

2

var c = {
    myProperty: [
        { name: 'this' },
        { name: 'can' },
        { name: 'get' },
        { name: 'crazy' }
    ]
};

c.myProperty.forEach(function(myProperty_element) {
    var x = myProperty_element.name;
    console.log('the name of the member is : ' + x);
})

এটি কীভাবে আমি এটি অর্জন করতে সক্ষম হয়েছিল তার একটি উপায়।


1

গৃহীত উত্তরগুলি সাধারণ ফাংশন ব্যবহার করে। সুতরাং জন্য প্রতিটি কোডে তীর ফাংশন ব্যবহার করে সামান্য পরিবর্তন সহ একই কোড পোস্ট করা

  yourArray.forEach(arrayItem => {
      var x = arrayItem.prop1 + 2;
      console.log(x);
  });

$। এও আপনি নীচের মত তীর ফাংশন ব্যবহার করতে পারেন

 $.each(array, (item, index) => {
       console.log(index, item);
 });

1

const jobs = [
    {
        name: "sipher",
        family: "sipherplus",
        job: "Devops"
    },
    {
        name: "john",
        family: "Doe",
        job: "Devops"
    },
    {
        name: "jim",
        family: "smith",
        job: "Devops"
    }
];

const txt = 
   ` <ul>
        ${jobs.map(job => `<li>${job.name} ${job.family} -> ${job.job}</li>`).join('')}
    </ul>`
;

document.body.innerHTML = txt;

পিছনের টিক্স সম্পর্কে সতর্কতা অবলম্বন করুন (`)


0

এটি কারও সাহায্য করতে পারে। সম্ভবত এটি নোডে একটি বাগ।

var arr = [ { name: 'a' }, { name: 'b' }, { name: 'c' } ];
var c = 0;

এটি কাজ করে না:

while (arr[c].name) { c++; } // TypeError: Cannot read property 'name' of undefined

তবে এটি কাজ করে ...

while (arr[c]) { c++; } // Inside the loop arr[c].name works as expected.

এটিও কাজ করে ...

while ((arr[c]) && (arr[c].name)) { c++; }

কিন্তু কেবল অর্ডারটি বিপরীত করা কার্যকর হয় না। আমি অনুমান করছি যে এখানে কোনও ধরণের অভ্যন্তরীণ অপ্টিমাইজেশন রয়েছে যা নোডকে ভেঙে দেয়।

while ((arr[c].name) && (arr[c])) { c++; }

ত্রুটি বলে অ্যারে অপরিজ্ঞাত, তবে এটি নয়: - / নোড v11.15.0

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