লুপের জন্য ES6 অ্যারে উপাদান সূচক অ্যাক্সেস


226

আমরা লুপ ব্যবহার করে অ্যারে উপাদানগুলিতে অ্যাক্সেস করতে পারি:

for (const j of [1, 2, 3, 4, 5]) {
  console.log(j);
}

বর্তমান সূচকেও অ্যাক্সেস করতে আমি এই কোডটি কীভাবে সংশোধন করতে পারি? আমি প্রতিটি সিনেমার জন্য বা ইন-ইন-এর জন্য সিনট্যাক্স ব্যবহার করে এটি অর্জন করতে চাই।

উত্তর:


347

ব্যবহার Array.prototype.keys:

for (const index of [1, 2, 3, 4, 5].keys()) {
  console.log(index);
}

আপনি যদি কী এবং মান উভয়ই অ্যাক্সেস করতে চান তবে আপনি ধ্বংসাত্মক ব্যবহারের Array.prototype.entries()সাথে ব্যবহার করতে পারেন :

for (const [index, value] of [1, 2, 3, 4, 5].entries()) {
  console.log(index, value);
}


64
যদি কেউ বিস্মিত হন, আমি এটির for-ofসাথে পরীক্ষা করেছি .entries()এবং এটি তুলনায় দ্বিগুণ ধীর .forEach()jsperf.com/for-of-vs-foreach-with-index

1
@ কে 48 জেনে ভাল লাগলো, যদি আপনি এসে সবচেয়ে দ্রুত করতে চান তবে "রিভার্সড ফর-লুপ" ব্যবহার করুন: অবিশ্বাস্য- ওয়েব
ডটকম

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

2
@ কাইলবেকার এবং এর সাথে অন লুপের কী আছে .entires()?
মিশা পেরেকোভস্কি

1
পরিবর্তে লুপ বিপরীতে আপনি দৈর্ঘ্য jsperf.com/revers-loop-vs-cache করতে পারবেন । আপনি যখন র‌্যামে বড় অ্যারে তৈরি না করে প্রবাহ প্রক্রিয়া করতে সক্ষম হন তখন পুনরাবৃত্তযোগ্য প্রক্রিয়াজাতকরণের জন্য ব্যবহারকারীর জন্য। লুপের গতি বাধা হবে না যেহেতু আপনার ক্ষেত্রে এই ক্ষেত্রে I / O বিলম্ব হবে।
x'ES

289

Array#entries সূচক এবং মান প্রদান করে, যদি আপনার উভয়েরই প্রয়োজন হয়:

for (let [index, value] of array.entries()) {

}

3
টাইপস্ক্রিপ্ট সহ: 'TS2495: প্রকার IterableIterator একটি অ্যারে প্রকার বা স্ট্রিং টাইপ নয়'। দেখে মনে হচ্ছে এর সমাধান হবে: github.com/Mic Microsoft
জোহানেস

2
এছাড়াও ইন্টারনেট এক্সপ্লোরার সমর্থিত নয়।
সামি

1
সুন্দর না. যেমন একটি ত্রুটি যেমন এবং document.styleSheets[0].cssRules.entries()এমনকি document.styleSheets.entries()এবং সম্ভবত অনেক অন্যান্য DOM পুনরাবৃত্ত কাঠামো ফেলে দেয়। এখনও ব্যবহার করতে হবে _.forEach()থেকেlodash
স্টিভেন Pribilinskiy

2
@ স্টিভেন: আপনার যদি সূচকের প্রয়োজন না হয় তবে আপনি ঠিক করতে পারেন for (var value of document.styleSheets) {}। আপনি সূচক প্রয়োজন থাকে তাহলে আপনি মাধ্যমে প্রথম একটি অ্যারের মান রূপান্তর করতে পারেন Array.from: for (let [index, value] of Array.from(document.styleSheets)) {}
ফেলিক্স ক্লিং

1
ওটা সুন্দর! Array.fromএফটিডব্লিউ
স্টিভেন প্রবিলিনস্কি

28

চটকদার নতুন নেটিভ ফাংশনগুলির বিশ্বে আমরা মাঝে মাঝে বেসিকগুলি ভুলে যাই।

for (let i = 0; i < arr.length; i++) {
    console.log('index:', i, 'element:', arr[i]);
}

পরিষ্কার, দক্ষ এবং আপনি এখনও breakলুপ করতে পারেন । বোনাস! আপনি প্রান্ত থেকেও শুরু করে পিছনের দিকে যেতে পারেন i--!

অতিরিক্ত দ্রষ্টব্য: আপনি যদি লুপটির মধ্যে মানটি প্রচুর পরিমাণে ব্যবহার করছেন তবে আপনি const value = arr[i];একটি সহজ, পঠনযোগ্য রেফারেন্সের জন্য লুপের শীর্ষে করতে ইচ্ছুক হতে পারেন ।


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

2
উপায় দ্বারা শর্তটি এর মতো দেখতে হবে -> এর জন্য (যাক i = 0; i <arr.leth; i++) (-1) ছাড়াই বা এটি অ্যারের সমস্ত উপাদান জুড়ে লুপ করবে না।
একত্রিত

1
@ কম্বাইন ভাল ক্যাচ! আপনার নোট প্রতিবিম্বিত করতে আমি আমার উত্তর আপডেট করেছি।
ক্রিস

4
আপনি এখনও breakএকটি করতে পারেন for-ofএবং for (let [index, value] of array.entries())পড়তে অনেক সহজ। পিছনে যেতে যোগ করার মত সহজ .reverse()
নাইজেল বি পেক

2
আমি এই প্রশ্নের এই পুরোপুরি গ্রহণযোগ্য উত্তর বলে মনে করি। এটি কখনই গৃহীত উত্তর হবে না তবে এটি কয়েক ডজন বা আরও বেশি লোক যারা এই প্রশ্নের সন্ধান করেছে তাদের সহায়তা করেছে। এসও এর পক্ষে এটি।
ড্যানোরাম

3

আধুনিক ব্রাউজারগুলিতে এইচটিএমএল / জেএস প্রসঙ্গে, অ্যারেগুলির তুলনায় অন্যান্য পুনরাবৃত্তিযোগ্য বস্তুগুলির সাথে আমরা [শ্রদ্ধেয়] .entries () ব্যবহার করতে পারি:

for(let [index, element] of document.querySelectorAll('div').entries()) {

    element.innerHTML = '#' + index

}

হ্যাঁ এটি কাজ করে, অন্যদিকে @ স্টিভেন প্রবিলিনস্কি দ্বারা উল্লিখিত অন্যান্যগুলি অন্যান্য ডিওএম পদ্ধতিগুলি এমন বস্তুগুলি ফেরত পাঠায় যাগুলির entriesজন্য কোনও পদ্ধতি নেই।
ম্যাটানস্টার

3

একটি for..ofলুপের মাধ্যমে আমরা এটি অর্জন করতে পারি array.entries()array.entriesএকটি নতুন অ্যারে পুনরাবৃত্তি বস্তু প্রদান করে। একটি পুনরুক্তিকারী অবজেক্টটি সেই অনুক্রমের মধ্যে তার বর্তমান অবস্থানের ট্র্যাক রাখার সময় কীভাবে পুনরাবৃত্তযোগ্য থেকে আইটেমগুলি অ্যাক্সেস করতে হয় তা জানে।

যখন next()পদ্ধতিটি পুনরুদ্ধার করা হয় তখন কী মান যুক্তগুলি উত্পন্ন হয়। এই কী মান জোড়ায় অ্যারে সূচকটি মূল এবং অ্যারের আইটেমের মান the

let arr = ['a', 'b', 'c'];
let iterator = arr.entries();
console.log(iterator.next().value); // [0, 'a']
console.log(iterator.next().value); // [1, 'b']

একটি for..ofলুপ মূলত একটি কনস্ট্রাক্ট যা একটি পুনরাবৃত্তিযোগ্য গ্রাস করে এবং সমস্ত উপাদানগুলির মধ্য দিয়ে লুপ করে (হুডের নীচে একটি পুনরুক্তি ব্যবহার করে)। আমরা array.entries()নিম্নলিখিত পদ্ধতিতে এটি একত্রিত করতে পারি :

array = ['a', 'b', 'c'];

for (let indexValue of array.entries()) {
  console.log(indexValue);
}


// we can use array destructuring to conveniently
// store the index and value in variables
for (let [index, value] of array.entries()) {
   console.log(index, value);
}


3

এছাড়াও আপনি সূচক নিজেকে হ্যান্ডেল পারেন যদি আপনি প্রয়োজন সূচক , যদি আপনি প্রয়োজন কাজ করবে না কী

let i = 0;
for (const item of iterableItems) {
  // do something with index
  console.log(i);

  i++;
}

0

যাঁরা কোনও Arrayবা এমনকি বিন্যাসের মতো নয় এমন অবজেক্ট ব্যবহার করছেন তাদের জন্য আপনি নিজের নিজস্ব পুনরাবৃত্তিকে সহজেই তৈরি করতে পারেন যাতে আপনি এখনও for ofএমন জিনিসগুলির জন্য ব্যবহার করতে পারেন localStorageযা কেবলমাত্র একটিতে রয়েছে length:

function indexerator(length) {
    var output = new Object();
    var index = 0;
    output[Symbol.iterator] = function() {
        return {next:function() {
            return (index < length) ? {value:index++} : {done:true};
        }};
    };
    return output;
}

তারপরে এটি কেবল একটি নম্বর খাওয়ান:

for (let index of indexerator(localStorage.length))
    console.log(localStorage.key(index))

0

es6 for...in

for(const index in [15, 64, 78]) {                        
    console.log(index);
}

5
প্রশ্নটি একটি for...ofনয় একটি লুপ সম্পর্কে জিজ্ঞাসা করছেfor...in
আব্রাহাম হার্নান্দেজ

3
for...inমূল ECMAScript নির্দিষ্টকরণের অংশ (যেমন "এস 1")। এছাড়াও, দ্রষ্টব্য যে for...inবস্তুর বৈশিষ্ট্যগুলির ওপরে পুনরাবৃত্তি করার জন্য। যদিও এটি অ্যারেগুলিতে পুনরাবৃত্তি করতে পারে, এটি প্রত্যাশিত ক্রমে এটি নাও করতে পারে। এমডিএন ডকুমেন্টেশনে
বোয়াজ

0

অন্য পদ্ধতির Array.prototype.forEach()হিসাবে ব্যবহার করা যেতে পারে

Array.from({
  length: 5
}, () => Math.floor(Math.random() * 5)).forEach((val, index) => {
  console.log(val, index)
})


-6
var fruits = ["apple","pear","peach"];
for (fruit of fruits) {
    console.log(fruits.indexOf(fruit));
    //it shows the index of every fruit from fruits
}

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


2
এটি O (n ^ 2) সময় নেয়।
হ্যারি

3
ক্ষেত্রে যেখানে পারফরম্যান্স গুরুত্বপূর্ণ নয়, সেখানে সদৃশ ফল থাকলে এটি এখনও সমস্ত সঠিক সূচী দেয় না। উদাহরণস্বরূপ, ["apple", "apple", "pear"]প্রদত্ত সূচকের 0, 0, 2পরিবর্তে হয় 0, 1, 2
ট্রিকোপল্যাক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.