কিভাবে লুপের জন্য একটি জাভাস্ক্রিপ্ট বন্ধ করবেন?


127

আমি এই জাভাস্ক্রিপ্টটি একটি অ্যারের মাধ্যমে পুনরাবৃত্তি করতে এবং একটি মেলানো অ্যারে উপাদান খুঁজে পেতে ব্যবহার করছি:

var remSize = [], 
    szString, remData, remIndex, i;

for (i = 0; i < remSize.length; i++) {      
    // I'm looking for the index i, when the condition is true
    remSize[i].size == remData.size ? remIndex = i : remIndex = -1;     
}

অ্যারে এই "মাপ" রয়েছে: ["34", "36", "38"...]

remData.size আমি যে "আকার" খুঁজছি তা (উদাহরণস্বরূপ "36")।

আমি iযে আকারটি অনুসন্ধান করছি তা সূচকে থাকলে আমাকে সূচকটি ফেরত দিতে হবে । নইলে আমার ফিরতে হবে -1। এই কাজ করতে একটি ভাল উপায় আছে কি?

উত্তর:


193

forজাভাস্ক্রিপ্টের প্রথম দিকে একটি লুপ থামাতে , আপনি ব্যবহার করুন break:

var remSize = [], 
    szString,
    remData,
    remIndex,
    i;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remIndex = -1; // Set a default if we don't find it
for (i = 0; i < remSize.length; i++) {      
     // I'm looking for the index i, when the condition is true
     if (remSize[i].size === remData.size) {
          remIndex = i;
          break;       // <=== breaks out of the loop early
     }
}

আপনি যদি কোনও ES2015 (ওরফে ES6) পরিবেশে থাকেন তবে এই নির্দিষ্ট ব্যবহারের ক্ষেত্রে, আপনি Array#findIndex(প্রবেশের সূচীটি সন্ধান করতে) বা Array#find(এন্ট্রি নিজেই সন্ধান করতে) ব্যবহার করতে পারেন , উভয়ই শিম্ম / পলিফিল করা যেতে পারে:

var remSize = [], 
    szString,
    remData,
    remIndex;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remIndex = remSize.findIndex(function(entry) {
     return entry.size === remData.size;
});

Array#find:

var remSize = [], 
    szString,
    remData,
    remEntry;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remEntry = remSize.find(function(entry) {
     return entry.size === remData.size;
});

Array#findIndexকলব্যাকটি সত্যিকারের মানটি প্রথমবারের জন্য থামায়, কলব্যাকের জন্য সেই কলটির সূচকটি ফেরত দেয়; -1কলব্যাক সত্যবাদী মানটি কখনই ফেরায় না যদি এটি ফিরে আসে। Array#findআপনি যা সন্ধান করছেন তা খুঁজে undefinedপেলে এটি বন্ধ হয়ে যায়, তবে এটি সূচী না হয়ে এন্ট্রি ফিরিয়ে দেয় (বা যদি কলব্যাক কখনও সত্যবাদী মান ফেরায় না)।

আপনি যদি কোনও ES5- সামঞ্জস্যপূর্ণ পরিবেশ (বা একটি ES5 শিম) ব্যবহার করছেন তবে আপনি অ্যারেতে নতুন someফাংশনটি ব্যবহার করতে পারেন , যা কলব্যাক সত্যতা মান না ফেরানো পর্যন্ত একটি কলব্যাক কল করে:

var remSize = [], 
    szString,
    remData,
    remIndex;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remIndex = -1; // <== Set a default if we don't find it
remSize.some(function(entry, index) {
    if (entry.size === remData.size) {
        remIndex = index;
        return true; // <== Equivalent of break for `Array#some`
    }
});

আপনি যদি jQuery ব্যবহার করেন তবে আপনি jQuery.eachকোনও অ্যারের মাধ্যমে লুপ করতে পারেন ; এটি দেখতে এই রকম হবে:

var remSize = [], 
    szString,
    remData,
    remIndex;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remIndex = -1; // <== Set a default if we don't find it
jQuery.each(remSize, function(index, entry) {
    if (entry.size === remData.size) {
        remIndex = index;
        return false; // <== Equivalent of break for jQuery.each
    }
});

1
রিটার্ন স্টেটমেন্ট ব্যবহার করা একটি ভাল পদ্ধতির। ধন্যবাদ @ টিজে ক্রাউডার
টেকলরিস_109

@ টিজে ক্রাউডার কোন বক্তব্যটি ভাল পন্থা: মিথ্যা ফিরবেন নাকি ব্রেক?
ইলিয়াস করিম

3
@ ইলিয়াস্কারিম: আপনি যে নির্মাণটি ব্যবহার করছেন তার জন্য উপযুক্তটি ব্যবহার করুন ( breakএকটি forলুপে, return falseইন jQuery.each, return trueইন some, ...)।
টিজে ক্রাউডার

13

পরিবর্তে লুপের জন্য ব্যবহার করুন যা ES2015 প্রকাশের অংশ। প্রত্যেকের মতো নয়, আমরা রিটার্ন, ব্রেক এবং চালিয়ে যেতে পারি। Https://hacks.mozilla.org/2015/04/es6-in-depth-iteators-and-the-for-of-loop/ দেখুন

let arr = [1,2,3,4,5];
for (let ele of arr) {
  if (ele > 3) break;
  console.log(ele);
}

এস 6 এর ভাল ব্যবহার, আমি মনে করি এটি এখানে সেরা উত্তরগুলির একটি
এমাদ সালাহ

প্রকৃতপক্ষে, আমি বলতে চাই যে এটি এখানে সেরা উত্তর - এটি করার সবচেয়ে neest উপায় ("সর্বাধিক সংক্ষিপ্ত, অ্যারে উপাদানগুলির মধ্য দিয়ে লুপিংয়ের জন্য সরাসরি সিনট্যাক্স", যেমন মোজিলা হ্যাক্স উত্তরের লিঙ্কটিতে বলেছেন)। আমরা যেখানেই পারি তার নতুন বৈশিষ্ট্যগুলি ব্যবহার করে ES6 এ যাবতীয় কঠোর পরিশ্রমের শোধ করতে হবে (এবং প্রক্রিয়াটিতে নিজেরাই উপকৃত হতে হবে)।
ভেলোজেট

10

যুক্তিটি ভুল। এটি সর্বদা অ্যারেতে শেষ উপাদানটির ফলাফলটি ফিরিয়ে দেয়।

remIndex = -1;

for (i = 0; i < remSize.length; i++) {      
    if (remSize[i].size == remData.size) {
        remIndex = i
        break;
    }
}

0

আমি জানি এটি কিছুটা পুরানো, তবে লুপের জন্য অ্যারের মাধ্যমে লুপিংয়ের পরিবর্তে পদ্ধতিটি ব্যবহার করা আরও সহজ হবে <array>.indexOf(<element>[, fromIndex])

এটি একটি অ্যারের মাধ্যমে লুপ করে, কোনও মানের প্রথম সূচক খুঁজে বের করে এবং ফিরে আসে। যদি মানটি অ্যারেতে না থাকে তবে এটি -1 প্রদান করে।

<array>আপনি যে সন্ধান করছেন তা হ'ল অ্যারে <element>, এবং [fromIndex]সূচকটি (ডিফল্ট ০ থেকে শুরু) is

আমি আশা করি এটি আপনার কোডের আকার হ্রাস করতে সহায়তা করে!


1
এটি শিরোনাম প্রশ্নের উত্তর দেয় না: How to stop a JavaScript for loop?এটির উত্তর দেয় কোনও ম্যাচ / -1 না থাকলে কোনও সূচী ফেরত দেওয়ার আরও ভাল উপায় কি ?
গ্রেইবার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.