javascript - জাভাস্ক্রিপ্ট একটি অ্যারের মাধ্যমে লুপ




arrays loops (20)

জাভাতে আপনি নিম্নরূপ একটি অ্যারের বস্তুর ট্র্যাভো করার for লুপের for ব্যবহার করতে পারেন:

String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray)
{
    // Do something
}

আপনি কি জাভাস্ক্রিপ্টে একই কাজ করতে পারেন?


এর জন্য (MyStringArray এর var s) {

(সরাসরি আপনার প্রশ্নের উত্তর: এখন আপনি করতে পারেন!)

অন্যান্য বেশিরভাগ উত্তর সঠিক, কিন্তু তারা উল্লেখ করে না (এই লেখার হিসাবে) যে ECMA স্ক্রিপ্ট 6 2015 পুনরাবৃত্তি করার জন্য একটি নতুন প্রক্রিয়া আনছে।

এই নতুন সিনট্যাক্সটি জাভাস্ক্রিপ্টে একটি অ্যারে পুনরাবৃত্তি করার সবচেয়ে মার্জিত উপায় (যতক্ষণ আপনি পুনরাবৃত্তি সূচকের প্রয়োজন নেই) তবে এটি এখনও ব্রাউজার দ্বারা ব্যাপকভাবে সমর্থিত নয়।

এটি বর্তমানে ফায়ারফক্স 13+, ক্রোম 37+ এর সাথে কাজ করে এবং এটি অন্য ব্রাউজারগুলির সাথে কাজ করে না (নীচে ব্রাউজারের সামঞ্জস্য দেখুন)। সৌভাগ্যক্রমে আমাদের কাছে JS কম্পাইলার (যেমন Babel ) যা আমাদের পরবর্তী প্রজন্মের বৈশিষ্ট্যগুলি ব্যবহার করার অনুমতি দেয়।

এটি নোডেও কাজ করে (আমি সংস্করণ 0.12.0 এ এটি পরীক্ষা করে দেখলাম)।

একটি অ্যারে পরিমাপ

// You could also use "let" instead of "var" for block scope.
for (var letter of ["a", "b", "c"]) { 
   console.log(letter); 
}

বস্তুর একটি অ্যারে পরিমাপ

var band = [
  {firstName : 'John', lastName: 'Lennon'}, 
  {firstName : 'Paul', lastName: 'McCartney'}
];

for(var member of band){
  console.log(member.firstName + ' ' + member.lastName); 
}

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

(উদাহরণটি https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of থেকে বের করা হয়েছে)

function* fibonacci() { // a generator function
  let [prev, curr] = [1, 1];
  while (true) {
    [prev, curr] = [curr, prev + curr];
    yield curr;
  }
}

for (let n of fibonacci()) {
  console.log(n);
  // truncate the sequence at 1000
  if (n >= 1000) {
    break;
  }
}

সামঞ্জস্যপূর্ণ টেবিল: http://kangax.github.io/es5-compat-table/es6/#for loops

স্পিক: http://wiki.ecmascript.org/doku.php?id=harmony:iterators

}


সবচেয়ে মার্জিত এবং দ্রুত উপায়

<script src="//code.jquery.com/jquery-2.1.0.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
<script>
    Benchmark.prototype.setup = function() {
        // Fake function with minimal action on the value
        var tmp = 0;
        var process = function(value) {
            tmp = value; // Hold a reference to the variable (prevent engine optimisation?)
        };

        // Declare the test Array
        var arr = [];
        for (var i = 0; i < 100000; i++)
            arr[i] = i;
    };
</script>

http://jsperf.com/native-loop-performance/8

সম্পাদিত (কারণ আমি ভুল ছিলাম)

100,000 আইটেমের একটি অ্যারের মাধ্যমে লুপ করার জন্য পদ্ধতিগুলি তুলনা করুন এবং প্রতিবার নতুন মান নিয়ে সর্বনিম্ন ক্রিয়াকলাপ করুন।

প্রস্তুতি:

<a href="http://jsperf.com/native-loop-performance/16" 
   title="http://jsperf.com/native-loop-performance/16"
><img src="http://i.imgur.com/YTrO68E.png" title="Hosted by imgur.com" /></a>

পরীক্ষা:

for (var i in array) if (array.hasOwnProperty(i)) {
    // do something with array[i]
}

অপেরা, সাফারি, ফায়ারফক্স এবং ক্রোম এখন অনেকগুলি সাধারণ লুপ অপ্টিমাইজ করার জন্য উন্নত অ্যারে পদ্ধতিগুলির একটি সেট ভাগ করে।

আপনি তাদের সব প্রয়োজন হতে পারে না, কিন্তু তারা খুব দরকারী হতে পারে, অথবা যদি প্রতিটি ব্রাউজার তাদের সমর্থিত হবে।

মোজিলা ল্যাবগুলি অ্যালগরিদমগুলি প্রকাশ করে এবং তারা উভয় WebKit ব্যবহার করে, যাতে আপনি তাদের নিজের যোগ করতে পারেন।

ফিল্টার কিছু শর্ত বা পরীক্ষা সন্তুষ্ট আইটেম অ্যারে ফেরত।

প্রতি অ্যারে সদস্য পরীক্ষা পাস যদি প্রতি আয় সত্য।

কেউ পরীক্ষা পাস যদি কিছু সত্য।

প্রতিটি প্রতিটি অ্যারের সদস্য একটি ফাংশন চালায় এবং কিছু ফেরত না।

মানচিত্রটি প্রত্যেকের জন্য মত, কিন্তু এটি প্রতিটি উপাদানটির জন্য ক্রিয়াকলাপের ফলাফলের একটি অ্যারে প্রদান করে।

এই পদ্ধতিগুলি তাদের প্রথম যুক্তিটির জন্য একটি ফাংশন নেয় এবং একটি ঐচ্ছিক দ্বিতীয় আর্গুমেন্ট থাকে, যা একটি অবজেক্ট যার আকৃতিটি আপনি অ্যারে সদস্যদের উপর চাপ প্রয়োগ করতে চান, কারণ এটি ফাংশনের মাধ্যমে লুপ করে।

আপনি এটি প্রয়োজন না হওয়া পর্যন্ত উপেক্ষা করুন।

indexOf এবং lastIndex ঠিক প্রথম বা শেষ উপাদানটির যথাযথ অবস্থান খুঁজে বের করে যা তার যুক্তিটি ঠিক মেলে।

(function(){
    var p, ap= Array.prototype, p2={
        filter: function(fun, scope){
            var L= this.length, A= [], i= 0, val;
            if(typeof fun== 'function'){
                while(i< L){
                    if(i in this){
                        val= this[i];
                        if(fun.call(scope, val, i, this)){
                            A[A.length]= val;
                        }
                    }
                    ++i;
                }
            }
            return A;
        },
        every: function(fun, scope){
            var L= this.length, i= 0;
            if(typeof fun== 'function'){
                while(i<L){
                    if(i in this && !fun.call(scope, this[i], i, this))
                        return false;
                    ++i;
                }
                return true;
            }
            return null;
        },
        forEach: function(fun, scope){
            var L= this.length, i= 0;
            if(typeof fun== 'function'){
                while(i< L){
                    if(i in this){
                        fun.call(scope, this[i], i, this);
                    }
                    ++i;
                }
            }
            return this;
        },
        indexOf: function(what, i){
            i= i || 0;
            var L= this.length;
            while(i< L){
                if(this[i]=== what)
                    return i;
                ++i;
            }
            return -1;
        },
        lastIndexOf: function(what, i){
            var L= this.length;
            i= i || L-1;
            if(isNaN(i) || i>= L)
                i= L-1;
            else
                if(i< 0) i += L;
            while(i> -1){
                if(this[i]=== what)
                    return i;
                --i;
            }
            return -1;
        },
        map: function(fun, scope){
            var L= this.length, A= Array(this.length), i= 0, val;
            if(typeof fun== 'function'){
                while(i< L){
                    if(i in this){
                        A[i]= fun.call(scope, this[i], i, this);
                    }
                    ++i;
                }
                return A;
            }
        },
        some: function(fun, scope){
            var i= 0, L= this.length;
            if(typeof fun== 'function'){
                while(i<L){
                    if(i in this && fun.call(scope, this[i], i, this))
                        return true;
                    ++i;
                }
                return false;
            }
        }
    }
    for(p in p2){
        if(!ap[p])
            ap[p]= p2[p];
    }
    return true;
})();

আপনার লুপে আপনার খুব সামান্য অন্তর্নিহিত সুযোগ রয়েছে এবং অতিরিক্ত ভেরিয়েবলগুলি বাদ দিয়ে এটি করার একটি উপায় রয়েছে।

var i = 0,
     item;

// note this is weak to sparse arrays or falsey values
for ( ; item = myStringArray[i++] ; ){ 
    item; // This is the string at the index.
}

অথবা আপনি সত্যিই আইডি পেতে চান এবং লুপ for সত্যিই শাস্ত্রীয় আছে:

var i = 0,
    len = myStringArray.length; // cache the length

for ( ; i < len ; i++ ){
    myStringArray[i]; // Don't use this if you plan on changing the length of the array
}

আধুনিক forEach আধুনিক ব্রাউজারগুলি forEach , map , reduce , filter এবং অন্যান্য পদ্ধতির হোস্টের জন্য forEach পদ্ধতিগুলিকে সমর্থন করে।


আমি পুরোপুরি underscore.js লাইব্রেরি ব্যবহার করার সুপারিশ করব। এটি আপনাকে বিভিন্ন ফাংশন সরবরাহ করে যা আপনি অ্যারে / সংগ্রহগুলির উপর পুনরাবৃত্তি করতে ব্যবহার করতে পারেন।

এই ক্ষেত্রে:

_.each([1, 2, 3], function(num){ alert(num); });
=> alerts each number in turn...

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

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
});

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

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]

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

4. একটি নির্দিষ্ট সম্পত্তি যোগ করুন, এবং তার গড় হিসাব

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

5. মূল ভিত্তিক একটি নতুন অ্যারে তৈরি করুন কিন্তু এটি সংশোধন না করেই তৈরি করুন

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]

6. প্রতিটি বিভাগ সংখ্যা গণনা

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}

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

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);

Array.prototype.find () পদ্ধতি অ্যারের প্রথম উপাদানটির মান প্রদান করে যা প্রদান করা পরীক্ষার ফাংশনটি সন্তুষ্ট করে।

তথ্যসূত্র


জাভাস্ক্রিপ্টে এটি একটি ইন-লুপের মাধ্যমে একটি অ্যারের মাধ্যমে লুপ করার পরামর্শ দেওয়া হয় না, তবে এটি লুপের জন্য ব্যবহার করা ভালো:

for(var i=0, len=myArray.length; i < len; i++){}

এটি অপ্টিমাইজ করা হয়েছে ("ক্যাশে" অ্যারের দৈর্ঘ্য)। আপনি আরো জানতে চাইলে, আমার পোস্টটি পড়তে পারেন


যদি আপনি একটি দ্রুত লুপ লিখতে একটি terse উপায় চান এবং আপনি বিপরীত মধ্যে পুনরাবৃত্তি করতে পারেন:

for (var i=myArray.length;i--;){
  var item=myArray[i];
}

এর দৈর্ঘ্যটি ক্যাশিংয়ের সুবিধা রয়েছে (এর জন্য অনুরূপ for (var i=0, len=myArray.length; i<len; ++i) এবং ভিন্ন for (var i=0; i<myArray.length; ++i) ) টাইপ করার জন্য কম অক্ষর হচ্ছে।

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


সময় লুপ ব্যবহার করুন ...

var i=0, item, items = ['one','two','three'];
while(item = items[i++]){
    console.log(item);
}

লগ: 'এক', 'দুই', 'তিন'

এবং বিপরীত ক্রম জন্য, এমনকি আরও দক্ষ লুপ

var items = ['one','two','three'], i = items.length;
while(i--){
    console.log(items[i]);
}

লগ: 'তিন', 'দুই', 'এক'

অথবা লুপ for শাস্ত্রীয়

var items = ['one','two','three']
for(var i=0, l = items.length; i < l; i++){
    console.log(items[i]);
}

লগ: 'এক', 'দুই', 'তিন'

রেফারেন্স: http://www.sitepoint.com/google-closure-how-not-to-write-javascript/


হ্যাঁ, তবে শুধুমাত্র যদি আপনার বাস্তবায়নের for ECMAScript 2015 ("স্বাবলম্বী" মুক্তির) এ উপস্থাপিত বৈশিষ্ট্যটির অন্তর্ভুক্ত রয়েছে।

এটা এই মত কাজ করে:

// REQUIRES ECMASCRIPT 2015+
var s, myStringArray = ["Hello", "World"];
for (s of myStringArray) {
  // ... do something with s ...
}

অথবা আরও ভাল, যেহেতু ECMAScript 2015 লক এবং const মাধ্যমে ব্লক-স্কোপেড ভেরিয়েবলগুলিও সরবরাহ করে:

// REQUIRES ECMASCRIPT 2015+
const myStringArray = ["Hello", "World"];
for (const s of myStringArray) {
  // ... do something with s ...
}
// s is no longer defined here

অনেক জাভাস্ক্রিপ্ট ডেভেলপার এখনও এমন পরিবেশে কাজ করছে যা এখনো নেই, তবে বিশেষ করে যদি ওয়েব ব্রাউজারগুলিতে চালানোর জন্য কোড লেখা হয়, যেখানে সাইট বিকাশকারীরা প্রায়ই নিশ্চিত হতে পারে না যে তাদের ক্লায়েন্টগুলি কী ব্রাউজার / সংস্করণ ব্যবহার করবে।

আপনি যদি জাভাস্ক্রিপ্ট ইন্টারপ্রেটারটি ECMAScript স্পেসিফিকেশন (যা উদাহরণস্বরূপ, 9-এর আগে ইন্টারনেট এক্সপ্লোরার সংস্করণগুলির পূর্ববর্তী সংস্করণ) এর আগের সংস্করণের সাথে সঙ্গতিপূর্ণ হয় তবে আপনি লুপের পরিবর্তে প্রতিটি forEach পদ্ধতির জন্য এটি ব্যবহার করতে পারেন। এই ক্ষেত্রে, আপনি অ্যারে প্রতিটি আইটেমে আহ্বান করা একটি ফাংশন পাস:

var myStringArray = [ "Hello", "World" ];
myStringArray.forEach( function(s) { 
     // ... do something with s ...
} );

তবে এমনকি যদি এটি অনুমান করা খুব বেশি হয় এবং আপনি এমন কিছু চান যা JavaScript এর সমস্ত সংস্করণে কাজ করে তবে আপনাকে একটি সুস্পষ্ট কাউন্টিং লুপ ব্যবহার করতে হবে। নিরাপদ সংস্করণ, যা স্পারস অ্যারেগুলিকে সঠিকভাবে পরিচালনা করে, এরকম কিছু হয়:

var i, s, myStringArray = [ "Hello", "World" ], len = myStringArray.length;
for (i=0; i<len; ++i) {
  if (i in myStringArray) {
    s = myStringArray[i];
    // ... do something with s ...
  }
}

স্থানীয় ভেরিয়েবলের দৈর্ঘ্য মান নির্ধারণ করা (লুপ অবস্থায় সম্পূর্ণ myStringArray.length অভিব্যক্তি সহ বিরোধ হিসাবে) কার্য সম্পাদনে উল্লেখযোগ্য পার্থক্য তৈরি করতে পারে কারণ এটি প্রতিটি সময় একটি সম্পত্তি সন্ধান myStringArray.length ; আমার মেশিনে Rhino ব্যবহার করে, speedup 43%।

আপনি লুপ প্রারম্ভিককরণ বিভাগে দৈর্ঘ্যের ক্যাশিং সম্পন্ন দেখতে পাবেন:

var i, len, myStringArray = [ "Hello", "World" ];
for (len = myStringArray.length, i=0; i<len; ++i) {

for ... অন্যদের দ্বারা উল্লিখিত বাক্যবিন্যাস একটি বস্তুর বৈশিষ্ট্য উপর looping জন্য হয়; যেহেতু জাভাস্ক্রিপ্টের একটি অ্যারে সাংখ্যিক সম্পত্তি নামগুলির (এবং স্বয়ংক্রিয়ভাবে আপডেট হওয়া length সম্পত্তির) সাথে একটি বস্তু, তাই আপনি তাত্ত্বিকভাবে তার সাথে একটি অ্যারেতে লুপ করতে পারেন। কিন্তু সমস্যাটি হল যে এটি সংখ্যাসূচক সম্পত্তি মানগুলিতে নিজেকে সীমাবদ্ধ করে না (মনে রাখবেন যে পদ্ধতিগুলিও আসলেই এমন বৈশিষ্ট্য যা মানটি বন্ধ করে দেওয়া হয়), এবং এটি সংখ্যাসূচক ক্রম অনুসারে এটি পুনরাবৃত্তি করে না। অতএব, for ... সিনট্যাক্সে অ্যারে মাধ্যমে looping জন্য ব্যবহার করা উচিত নয়


অবশ্যই এটি অকার্যকর এবং অনেকেই এটা অবজ্ঞা করে, কিন্তু এটি উল্লেখ করা সবচেয়ে নিকটতম:

var myStringArray = ["Hello","World"];
myStringArray.forEach(function(f){
    // Do something
})

অ্যারে লুপ:

for(var i = 0; i < things.length; i++){
    var thing = things[i];
    console.log(thing);
}

বস্তুর লুপ:

for(var prop in obj){
    var propValue = obj[prop];
    console.log(propValue);
}

আমি এখনো এই পার্থক্যটি দেখিনি, যা আমি ব্যক্তিগতভাবে পছন্দ করি:

একটি অ্যারের দেওয়া:

var someArray = ["some", "example", "array"];

আপনি দৈর্ঘ্য সম্পত্তি অ্যাক্সেস ছাড়া এটি উপর লুপ করতে পারেন:

for (var i=0, item; item=someArray[i]; i++) {
  // item is "some", then "example", then "array"
  // i is the index of item in the array
  alert("someArray[" + i + "]: " + item);
}

এই জেএসফিল্ডটি দেখিয়েছেন যে: http://jsfiddle.net/prvzk/

এটি শুধুমাত্র অ্যারের জন্য কাজ করে যা বিরল নয় । মানে যে অ্যারের প্রতিটি সূচক এ আসলে একটি মান। যাইহোক, আমি দেখেছি যে আমি অভ্যাসে জাভাস্ক্রিপ্টে স্পারস অ্যারে ব্যবহার করি না ... এই ক্ষেত্রে এটি সাধারণত একটি মানচিত্র / হ্যাশ টেবিল হিসাবে ব্যবহার করা অনেক সহজ। যদি আপনার একটি স্পারস অ্যারে থাকে, এবং 0 টির বেশি লুপ করতে চান .. দৈর্ঘ্য -1, আপনাকে এর জন্য (var i = 0; i <someArray.length; ++ i) গঠন করতে হবে, তবে আপনার এখনও যদি ভিতরে থাকা দরকার বর্তমান সূচকের উপাদান আসলে সংজ্ঞায়িত কিনা তা পরীক্ষা করার জন্য লুপ।

এছাড়াও, সিএমএস নীচের একটি মন্তব্যের উল্লেখ করে, আপনি কেবল এমন অ্যারে ব্যবহার করতে পারেন যা কোন মিথ্যাবাদী মান ধারণ করে না। উদাহরণ থেকে স্ট্রিংগুলির অ্যারে কাজ করে, তবে যদি আপনার খালি স্ট্রিং থাকে, অথবা 0 বা নাএনএন সংখ্যা থাকে তবে লুপ অকালিকভাবে বন্ধ হয়ে যাবে। আবার অভ্যাসের ক্ষেত্রে এটি আমার পক্ষে কোন সমস্যা নয়, তবে এটি মনে রাখা কিছু, যা এটি ব্যবহার করার আগে এটি সম্পর্কে একটি লুপ চিন্তা করতে পারে ... এটি কিছু লোকের জন্য এটি অযোগ্য হতে পারে :)

আমি এই লুপ সম্পর্কে কি পছন্দ করি:

  • এটা লিখতে সংক্ষিপ্ত
  • প্রবেশাধিকার প্রয়োজন (একা ক্যাশে যাক) দৈর্ঘ্য সম্পত্তি
  • অ্যাক্সেস করার আইটেম স্বয়ংক্রিয়ভাবে আপনি চয়ন নাম অধীনে লুপ শরীরের মধ্যে সংজ্ঞায়িত করা হয়।
  • তালিকা / স্ট্যাকের মত অ্যারে ব্যবহার করতে array.push এবং array.splice দিয়ে খুব স্বাভাবিকভাবে সংযুক্ত করে

এই কাজটি কারন হল অ্যারের স্পেসিফিকেশনটি ম্যান্ডেট করে যে যখন আপনি সূচী> = অ্যারের দৈর্ঘ্য থেকে কোনও আইটেম পড়েন, তখন এটি অনির্ধারিত ফিরে আসবে। যখন আপনি যেমন একটি অবস্থান লিখুন এটি আসলে দৈর্ঘ্য আপডেট করা হবে।

আমার জন্য, এই নির্মাণটি জাভা 5 সিনট্যাক্সকে সবচেয়ে নিখুঁতভাবে অনুকরণ করে যা আমি ভালোবাসি:

for (String item : someArray) {
}

... লুপ ভিতরে বর্তমান সূচক সম্পর্কে বুদ্ধিমান যোগ সুবিধা সঙ্গে


উদাহরণস্বরূপ, আমি একটি ফায়ারফক্স কনসোল ব্যবহার করেছি:

[].forEach.call(document.getElementsByTagName('pre'), function(e){ 
   console.log(e);
})

জাভাস্ক্রিপ্টে, একটি অ্যারে লুপ অনেক সমাধান আছে।

নীচের কোড জনপ্রিয় বেশী

/** Declare inputs */
const items = ['Hello', 'World']

/** Solution 1. Simple for */
console.log('solution 1. simple for')

for (let i = 0; i < items.length; i++) {
  console.log(items[i])
}

console.log()
console.log()

/** Solution 2. Simple while */
console.log('solution 2. simple while')

let i = 0
while (i < items.length) {
  console.log(items[i++])
}

console.log()
console.log()

/** Solution 3. forEach*/
console.log('solution 3. forEach')

items.forEach(item => {
  console.log(item)
})

console.log()
console.log()

/** Solution 4. for-of*/
console.log('solution 4. for-of')

for (const item of items) {
  console.log(item)
}

console.log()
console.log()


প্রোটোটাইপ এর অন্তর্ভুক্ত নয় এমন কেবলমাত্র নিজস্ব বস্তুর বৈশিষ্ট্যগুলির উপর পুনরাবৃত্তি করার একটি পদ্ধতি রয়েছে:

let arr = [1,2,3,4,5];

for(let i=0, size=arr.length; i<size; i++){
    // do something
}

কিন্তু এটি এখনও কাস্টম সংজ্ঞায়িত বৈশিষ্ট্য overerate হবে।

জাভাস্ক্রিপ্টে কোনও কাস্টম সম্পত্তি অ্যারের সহ কোনও বস্তুতে বরাদ্দ করা যেতে পারে।

যদি কেউ sparsed অ্যারের উপর পুনরাবৃত্তি করতে চায়, for (var i = 0; i < array.length; i++) if (i in array)বা array.forEachসঙ্গে es5shimব্যবহার করা উচিত।


হ্যাঁ, আপনি লুপ ব্যবহার করে জাভাস্ক্রিপ্টে একই কাজ করতে পারেন, তবে এটি সীমাবদ্ধ নয়, জাভা স্ক্রিপে অ্যারেগুলির উপর লুপ করার অনেক উপায়, কল্পনা করুন আপনার নীচের এই অ্যারে আছে এবং আপনি এটির উপর একটি লুপ করতে চান:

var arr = [1, 2, 3, 4, 5];

এই সমাধান হয়:

1) লুপ জন্য

লুপের জন্য জাভাস্ক্রিপ্টে অ্যারেগুলির মাধ্যমে লুপ করা একটি সাধারণ উপায়, তবে বড় অ্যারের জন্য দ্রুততম সমাধান হিসাবে বিবেচিত হয় না:

for (var i=0, l=arr.length; i<l; i++) { 
  console.log(arr[i]);
}

2) লুপ সময়

লুপটি দীর্ঘ অ্যারেগুলির মাধ্যমে লুপের দ্রুততম উপায় হিসাবে বিবেচিত হলেও সাধারণত জাভাস্ক্রিপ্টে কম ব্যবহার করা হয়:

let i=0;

while (arr.length>i) {
    console.log(arr[i]);
    i++;
}

3) যখন
কিছু সিনট্যাক্স পার্থক্যটি নিম্নরূপ একই জিনিস করার সময় করবেন:

let i=0;
do {
  console.log(arr[i]);
  i++;
}
while (arr.length>i);

এইগুলি জাভাস্ক্রিপ্ট loops করতে প্রধান উপায়, কিন্তু এটি করার আরও কয়েকটি উপায় রয়েছে।

এছাড়াও আমরা for inজাভাস্ক্রিপ্ট বস্তু উপর looping জন্য লুপ ব্যবহার।

এছাড়াও তাকান map(), filter(), reduce()জাভাস্ক্রিপ্ট মধ্যে শৃঙ্খলার ইত্যাদি ফাংশন। তারা ব্যবহার whileএবং তুলনায় জিনিস অনেক দ্রুত এবং ভাল করতে পারে for

আপনি যদি জাভাস্ক্রিপ্টে অ্যারেগুলির উপর async ফাংশন সম্পর্কে আরও জানতে চান তবে এটি ভাল নিবন্ধ।

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

কার্যকরী প্রোগ্রামিং এর কোণঠাসাগুলির মধ্যে একটি তালিকা এবং তালিকা ক্রিয়াকলাপের বিশেষ ব্যবহার। এবং সেগুলি ঠিক মত শব্দ কি: অ্যারে জিনিস, এবং আপনি তাদের সাথে কি উপাদান। কিন্তু ক্রিয়ামূলক মানসিকতা আপনি আশা করতে পারে তুলনায় একটু ভিন্ন আচরণ করে।

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

এটি আবার আপনি লুপ জন্য একটি লিখতে হবে না মানে।

আরো পড়ুন >> here :


আপনি যদি jQuery লাইব্রেরি ব্যবহার করেন তবে http://api.jquery.com/jQuery.each/ ব্যবহার করে বিবেচনা করুনhttp://api.jquery.com/jQuery.each/

ডকুমেন্টেশন থেকে:

jQuery.each( collection, callback(indexInArray, valueOfElement) )

ফেরত: অবজেক্ট

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

$.each()ফাংশন হিসাবে একই নয় $(selector).each(), যা বারবার ব্যবহার করা হয় একচেটিয়াভাবে একটি jQuery বস্তুর উপরে। $.each()ফাংশন, কোনো সংগ্রহ পুনরুক্তি উপর ব্যবহার করা যেতে পারে তা একটি মানচিত্র (জাভাস্ক্রিপ্ট অবজেক্ট) অথবা একটি অ্যারে। একটি অ্যারের ক্ষেত্রে, কলব্যাক একটি অ্যারে সূচী এবং সংশ্লিষ্ট সময় অ্যারের মান প্রতিটি সময় পাস করা হয়। (মানটি thisকীওয়ার্ডের মাধ্যমেও অ্যাক্সেস করা যেতে পারে তবে জাভাস্ক্রিপ্টটি সর্বদা thisমানটিকে মোড়ানো করবে Objectযদিও এটি একটি সাধারণ স্ট্রিং বা সংখ্যা মান রয়েছে।) পদ্ধতিটি তার প্রথম যুক্তিটি, পুনরাবৃত্তি করা বস্তুটি প্রদান করে।


জাভাস্ক্রিপ্ট এটি করতে উপায় কয়েক আছে। প্রথম দুটি উদাহরণ জাভাস্ক্রিপ্ট নমুনা হয়। তৃতীয়টি একটি জাভাস্ক্রিপ্ট লাইব্রেরি ব্যবহার করে, যা jQuery এর .each()ফাংশন ব্যবহার করে।

var myStringArray = ["hello", "World"];
for (var i=0; i < myStringArray.length; i++) {
  alert(myStringArray[i]);
}

var myStringArray = ["hello", "World"];
$.each(myStringArray, function(index, value){
  alert(value);
})

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
var arr = [1, 2, 3, 1023, 1024];
for (var value; value = arr.pop();) {
    value + 1
}


সংক্ষিপ্ত উত্তর: হ্যাঁ। আপনি এই সঙ্গে করতে পারেন:

var myArray = ["element1", "element2", "element3", "element4"];

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

একটি ব্রাউজার কনসোলে, আপনি "element1", "element2", ইত্যাদি মুদ্রিত কিছু দেখতে পারেন।





for-loop