javascript বস্তুর জন্য প্রতিটি?




jquery (3)

সম্ভাব্য ডুপ্লিকেট:
অবজেক্ট লিটারাল মান উপর overterate

আমি জাভাস্ক্রিপ্ট বস্তু আছে:

var object = someobject;

Object { aaa=true, bbb=true, ccc=true }

আমি কিভাবে এই জন্য প্রতিটি ব্যবহার করতে পারেন?

 object.each(function(index, value)) {
      console.log(value);
 }

কাজ করছে না.


for(var key in object) {
   console.log(object[key]);
}

একটি জাভাস্ক্রিপ্ট বস্তু একটি মান। প্রতিটি ফাংশন নেই। jQuery একটি ফাংশন প্রদান করে। api.jquery.com/jQuery.each দেখুন নীচের কাজ করা উচিত

$.each(object, function(index, value) {
    console.log(value);
}); 

আরেকটি বিকল্প Object.keys() এবং অ্যারে। .map() ফাংশন ব্যবহার করে ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করা হবে।

Object.keys(object).map(function(objectKey, index) {
    var value = object[objectKey];
    console.log(value);
});

https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Object/keys এবং https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

এটি সাধারণত ভ্যানিলা জাভাস্ক্রিপ্ট ফর-লুপ ব্যবহার করার চেয়ে ভাল, যদি না আপনি স্বাভাবিক জন্য-লুপ ব্যবহার করার প্রভাবগুলি বুঝতে না পারেন এবং সম্পত্তি শৃঙ্খলে লুপ করা যেমন নির্দিষ্ট বৈশিষ্ট্যগুলির জন্য এটি ব্যবহার করেন।

কিন্তু সাধারণত, একটি for-loop jQuery বা Object.keys().map() চেয়ে ভাল কাজ করে না। আমি নিচে একটি প্লেইন জন্য-লুপ ব্যবহার করে দুটি সম্ভাব্য সমস্যা মধ্যে যেতে হবে।

ঠিক আছে, তাই অন্যান্য উত্তর ইঙ্গিত, একটি সামান্য জাভাস্ক্রিপ্ট বিকল্প হতে হবে

for(var index in object) { 
    var attr = object[index]; 
}

এই দুটি সম্ভাব্য সমস্যা আছে:

1। আপনি যে অ্যাট্রিবিউটটি সন্ধান করছেন তা অটোমেটিক থেকে এবং প্রোটোটাইপ শৃঙ্খলা থেকে নয় তা যাচাই করতে চান। এটি hasOwnProperty ফাংশন দিয়ে চেক করা যেতে পারে

for(var index in object) { 
   if (object.hasOwnProperty(index)) {
       var attr = object[index];
   }
}

আরো তথ্যের জন্য https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty দেখুন।

jQuery.each এবং Object.keys ফাংশনগুলি স্বয়ংক্রিয়ভাবে Object.keys যত্ন নেয়।

২। একটি সরল জন্য-লুপ সঙ্গে আরেকটি সম্ভাব্য সমস্যা সুযোগ এবং অ বন্ধ closures। এটি একটি বিট জটিল, কিন্তু উদাহরণস্বরূপ নিম্নলিখিত কোড নিতে। আইডস বোতাম 0, বোতাম 1, বোতাম 2 ইত্যাদি সহ আমাদের বোতামগুলির গুচ্ছ আছে এবং আমরা তাদের উপর একটি অনুলিপি সেট করতে চাই এবং একটি কনসোল.এইভাবে লগইন করি:

<button id='button0'>click</button>
<button id='button1'>click</button>
<button id='button2'>click</button>

var messagesByButtonId = {"button0" : "clicked first!", "button1" : "clicked middle!", "button2" : "clicked last!"];
for(var buttonId in messagesByButtonId ) { 
   if (messagesByButtonId.hasOwnProperty(buttonId)) {
       $('#'+buttonId).click(function() {
           var message = messagesByButtonId[buttonId];
           console.log(message);
       });
   }
}

যদি, কিছু সময়ের পর, আমরা যেকোনো বোতামে ক্লিক করি যা আমরা সর্বদা "শেষ ক্লিক করে" পেতে পারি! কনসোল, এবং কখনও কখনও "প্রথম ক্লিক!" অথবা "মধ্যম ক্লিক!"। কেন? যেহেতু onclick ফাংশনটি কার্যকর করা হয়, তখন এটি সেই মুহূর্তে buttonId পরিবর্তনশীল ব্যবহার করে messagesByButtonId[buttonId] প্রদর্শন করবে। এবং যে মুহূর্তে লুপ শেষ হয়ে গেলে, buttonId পরিবর্তনশীলটি এখনও "বোতাম 2" (শেষ লুপ পুনরাবৃত্তির সময় যে মানটি ছিল), এবং তাই messagesByButtonId[buttonId] messagesByButtonId["button2"] হবে, messagesByButtonId["button2"] , অর্থাৎ "শেষ ক্লিক ! "।

বন্ধের আরও তথ্যের জন্য https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures দেখুন। বিশেষ করে আমাদের পৃষ্ঠায় যে পৃষ্ঠার শেষ অংশ।

আবার, jQuery.each এবং Object.keys().map() আমাদের জন্য স্বয়ংক্রিয়ভাবে এই সমস্যাটি সমাধান করে, কারণ এটি আমাদের একটি function(index, value) (যা বন্ধ আছে) সরবরাহ করে। তাই আমরা সূচক এবং মান উভয় ব্যবহার করতে নিরাপদ। বিশ্রাম নিশ্চিত যে তাদের কাছে মূল্য রয়েছে যা আমরা আশা করি।


var object = { "a": 1, "b": 2};
$.each(object, function(key, value){
  console.log(key + ": " + object[key]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

//output
a: 1
b: 2






jquery