কৌণিকের মধ্যে foreach লুপ


110

আমি মাধ্যমে চালু ছিল forEach loopমধ্যে AngularJS। কয়েকটি বিষয় আছে যা আমি এটি সম্পর্কে বুঝতে পারি নি।

  1. পুনরুক্তি ফাংশন ব্যবহার কি? এটি ছাড়া কি কোনও উপায় আছে?
  2. নীচে দেখানো হিসাবে কী এবং মানটির তাত্পর্যটি কী?

angular.forEach($scope.data, function(value, key){});

PS: আমি যুক্তি ছাড়াই এই ফাংশনটি চালানোর চেষ্টা করেছি এবং এটি কার্যকর হয়নি।

এখানে আমার json:

[
   {
     "Name": "Thomas",
     "Password": "thomasTheKing"
   },
   {
     "Name": "Linda",
     "Password": "lindatheQueen"
   }
]

আমার JavaScriptফাইল:

var app = angular.module('testModule', []);

app.controller('testController', function($scope, $http){
   $http.get('Data/info.json').then(
      function(data){
         $scope.data = data;
      }
   );

   angular.forEach($scope.data, function(value, key){
      if(value.Password == "thomasTheKing")
         console.log("username is thomas");
   });
});

অন্য প্রশ্ন : শর্তটি এবং কনসোলে "ব্যবহারকারীর নাম থোমাস" প্রিন্ট করলে উপরের ফাংশনটি কেন প্রবেশ করে না?


6
কারণ আপনি নিজের successঘটনার জন্য অপেক্ষা করছেন না $http.get(), এইভাবে যখন angular.forEach()ঘটে $scope.dataতখনও অপরিজ্ঞাত।
টম

1
কোডটি কার্যকর করার জন্য কি কোনও নির্দিষ্ট উপায় আছে যদি না
জেসনটি

এই কৌণিকরেখার জন্য লাইনটি পরিবর্তন করুন for forEach (মান, ফাংশন (মান, কী) so কনসোল.লগ (কী + ':' + মান.নাম);});
ইস্রায়েল ওসবিনা

উত্তর:


208

প্রশ্ন 1 এবং 2

সুতরাং মূলত, প্রথম প্যারামিটারটি পুনরাবৃত্তি করার অবজেক্ট। এটি কোনও অ্যারে বা কোনও বস্তু হতে পারে। এটি যদি এর মতো কোনও বস্তু হয়:

var values = {name: 'misko', gender: 'male'};

কৌণিক প্রতিটি মান এক এক করে গ্রহণ করবে প্রথমটির নাম নাম, দ্বিতীয়টি লিঙ্গ is

যদি আপনার পুনরুক্তি করা অবজেক্টটি একটি অ্যারে হয় তবে (এটিও সম্ভব) এটির মতো:

[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
 { "Name" : "Linda", "Password" : "lindatheQueen" }]

Angular.forEach প্রথম অবজেক্ট দ্বারা শুরু করে একের পর এক গ্রহণ করবে, তারপরে দ্বিতীয় বস্তু।

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

var obj = {name: 'misko', gender: 'male'};
var log = [];
angular.forEach(obj, function(value, key) {
  console.log(key + ': ' + value);
});
// it will log two iteration like this
// name: misko
// gender: male

সুতরাং কী আপনার কীগুলির স্ট্রিং মান এবং মানটি ... মান। আপনি এই জাতীয় মানটি অ্যাক্সেস করতে কীটি ব্যবহার করতে পারেন:obj['name'] = 'John'

এবার আপনি যদি কোনও অ্যারে প্রদর্শন করেন তবে এটির মতো:

var values = [{ "Name" : "Thomas", "Password" : "thomasTheKing" },
           { "Name" : "Linda", "Password" : "lindatheQueen" }];
angular.forEach(values, function(value, key){
     console.log(key + ': ' + value);
});
// it will log two iteration like this
// 0: [object Object]
// 1: [object Object]

সুতরাং মান হ'ল আপনার অবজেক্ট (সংগ্রহ), এবং কী আপনার অ্যারের সূচক তাই থেকে:

[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
 { "Name" : "Linda", "Password" : "lindatheQueen" }]
// is equal to
{0: { "Name" : "Thomas", "Password" : "thomasTheKing" },
 1: { "Name" : "Linda", "Password" : "lindatheQueen" }}

আমি এটি আপনার প্রশ্নের উত্তর আশা করি। আপনি চাইলে কিছু কোড এবং পরীক্ষা চালানোর জন্য এখানে একটি জেএসফিডেল দেওয়া হয়েছে: http://jsfiddle.net/ygahqdge/

আপনার কোডটি ডিবাগ করছে

সমস্যাটি সত্য থেকে আসা বলে মনে হচ্ছে $http.get()এটি একটি অ্যাসিনক্রোনাস অনুরোধ।

তুমি তোমার ছেলে একটি ক্যোয়ারী প্রেরণ তাহলে যখন আপনি ব্রাউজার শেষ ডাউনলোড করার এটা সাফল্য চালানো। কিন্তু আপনার অনুরোধ প্রেরণের ঠিক পরে angular.forEachআপনার জেএসএনের উত্তরের অপেক্ষা না করে আপনার লুপটি সম্পাদন করুন ।

সাফল্যের ফাংশনে আপনাকে লুপটি অন্তর্ভুক্ত করতে হবে

var app = angular.module('testModule', [])
    .controller('testController', ['$scope', '$http', function($scope, $http){
    $http.get('Data/info.json').then(function(data){
         $scope.data = data;

         angular.forEach($scope.data, function(value, key){
         if(value.Password == "thomasTheKing")
           console.log("username is thomas");
         });
    });

});

এই কাজ করা উচিত.

আরও গভীরভাবে যাচ্ছি

$ HTTP এপিআই উপর ভিত্তি করে তৈরি ডেফার্ড / API গুলি প্রতিজ্ঞা $ কুই পরিষেবা দ্বারা উন্মুক্ত। সাধারণ ব্যবহারের নিদর্শনগুলির জন্য এটি খুব বেশি গুরুত্বপূর্ণ নয়, উন্নত ব্যবহারের জন্য এই API গুলি এবং তারা যে গ্যারান্টি দিয়ে থাকে তার সাথে নিজেকে পরিচিত করা গুরুত্বপূর্ণ।

আপনি বিলম্বিত / প্রতিশ্রুত এপিআইগুলিতে একবার নজর দিতে পারেন , মসৃণ অ্যাসিক্রোনাস ক্রিয়া করা অ্যাঙ্গুলারের একটি গুরুত্বপূর্ণ ধারণা।


2
কলিন বি (প্রোফাইল এখানে ) to মন্তব্য করতে চেয়েছিল successএবং error অবহেলিত হয়েছেthenপরিবর্তে পদ্ধতি ব্যবহার করার successপরামর্শ দেওয়া হয়। এখন, @ কলিন, বাইরে যান এবং 50 টি রেপ পেতে কয়েকটি প্রশ্নের উত্তর দিন! : P: P
ড্রিউ

3
অ্যাসিঙ্ক সমান্তরাল নয়। সমান্তরাল জন্য, তিনি ওয়েব ওয়ার্কার্স প্রয়োজন, প্রতিশ্রুতি নয়। ক্ষুদ্র বিট পেডেন্টিক, তবে এটি যখনই ঘটে তখন ভুল তথ্য বন্ধ করা।
কাইল বেকার

1
ধন্যবাদ @ কাইলবেকার, আমি এই উত্তরটি আপডেট করেছি, আপনি ঠিক "সমান্তরাল" ভাষার অপব্যবহার করেছিলেন।
সেবাস্তিয়ানবার্বিয়ার

@sebastienbarbier তুমি আমাকে এই সমস্যা সমাধানের সাহায্য করুন করতে পারেন stackoverflow.com/questions/50100381/...
Nikson

7

নীচে প্রদর্শিত হিসাবে আপনি JSON এর জন্য নেস্টেড কৌণিক.সর্বস্ব লুপ ব্যবহার করতে হবে:

 var values = [
        {
            "name":"Thomas",
            "password":"thomas"
        },
        { 
            "name":"linda",
            "password":"linda"
        }];

    angular.forEach(values,function(value,key){
        angular.forEach(value,function(v1,k1){//this is nested angular.forEach loop
            console.log(k1+":"+v1);
        });
    });

1
না, আপনি একটি একক লুপ ব্যবহার হবে, এবং উন্মুক্তভাবে এই ক্ষেত্রে, আপনি শুধু নেটিভ foreach (), একটি লা ব্যবহার করা উচিত values.forEach(object => console.log($ {object.name}: $ {object.password} ))
কাইল বেকার

স্রেফ কনসোল.লাইন লাইনটি পরিবর্তন করুন (কী + ':' + মান); INTO কনসোল.লগ (কী + ':' + মান.নাম);
ইস্রায়েল ওসবিনা

5

angular.forEach()আপনার মাধ্যমে পুনরুক্তি হবে jsonঅবজেক্ট।

প্রথম পুনরাবৃত্তি,

কী = 0, মান = name "নাম": "থমাস", "পাসওয়ার্ড": "থোমাসকিং"

দ্বিতীয় পুনরাবৃত্তি,

কী = 1, মান = name "নাম": "লিন্ডা", "পাসওয়ার্ড": "লিন্ডাথেকুইন"}

আপনার মান পেতে name, আপনি ব্যবহার করতে পারেন value.nameবা value["name"]। আপনার একই password, আপনি ব্যবহার value.passwordবা value["password"]

নীচের কোডটি আপনাকে যা দেবে তা দেবে:

   angular.forEach(json, function (value, key)
         {
                //console.log(key);
                //console.log(value);
                if (value.password == "thomasTheKing") {
                    console.log("username is thomas");
                }
         });


2

কৌণিক 7 এ লুপটির জন্য নীচের মতো

var values = [
        {
            "name":"Thomas",
            "password":"thomas"
        },
        { 
            "name":"linda",
            "password":"linda"
        }];

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