লোড্যাশের সাথে জাভাস্ক্রিপ্ট অবজেক্টে বৈশিষ্ট্যগুলি লুপ করুন


123

একটি জাভাস্ক্রিপ্ট অবজেক্টের বৈশিষ্ট্যগুলি দিয়ে লুপ করা কি সম্ভব? উদাহরণস্বরূপ, আমার একটি জাভাস্ক্রিপ্ট অবজেক্টটি এটি হিসাবে সংজ্ঞায়িত হয়েছে:

myObject.options = {
  property1: 'value 1',
  property2: 'value 2'
};

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

উত্তর:


34

হ্যাঁ আপনি পারবেন এবং লোড্যাশের দরকার নেই ... যেমন

for (var key in myObject.options) {
  // check also if property is not inherited from prototype
  if (myObject.options.hasOwnProperty(key)) { 
    var value = myObject.options[key];
  }
}

সম্পাদনা করুন : গৃহীত উত্তর ( _.forOwn () ) https://stackoverflow.com/a/21311045/528262 হওয়া উচিত


6
+ আমি জানি তারা লোডাস ফান্ট স্টাইল চায়, আমার কাছে ওপি বুঝতে দেয় যে আপনি কোনও লাইব্রেরির উপর নির্ভর করে কোনও আপত্তি ডাব্লু / আউট লুপ করতে পারেন (যদি সে কেবল লড্যাশ সহ সেই কার্যকারিতা ডাব্লু / ও চায়)
স্টেকবি

39
যে ক্ষেত্রে, উভয় উত্তর প্রদান দুর্দান্ত ছিল।
flq

1
ব্যবহার lodashএবং না শুধুমাত্র এটি বিরক্তিকর hasOwnPropertyচেক প্রয়োজন না করে ন্যায়সঙ্গত
মুগেন

601

ব্যবহার _.forOwn()

_.forOwn(obj, function(value, key) { } );

https://lodash.com/docs#forOwn

লক্ষ্য করুন forOwnচেক hasOwnProperty, যখন একটি বস্তু সম্পত্তিসমূহ উপর লুপিং করতে হিসাবে আপনি সাধারণত প্রয়োজন। forInএই চেক না।


22
এটি খুব গুরুত্বপূর্ণ যে keyদ্বিতীয় পরম এটি লক্ষ্য করা , তবে এটি
ফিল

18

"সম্পত্তি আছে কিনা তা পরীক্ষা করে দেখার" আপনার ইচ্ছার জন্য আপনি সরাসরি লো-ড্যাশ ব্যবহার করতে পারেন has

var exists = _.has(myObject, propertyNameToCheck);

3

আপনি স্পষ্টভাবে ভ্যানিলা জেএস এর সাথে এটি করতে পারবেন যেমন স্টেকবি দেখিয়েছে, তবে আমি মনে eachকরি এটি লোডাশের মাধ্যমে কীভাবে করা যায় সে সম্পর্কিত মূল প্রশ্নের সেরা উত্তর।

_.each( myObject.options, ( val, key ) => { 
    console.log( key, val ); 
} );

জনিএইচকে যেমন উল্লেখ করেছেন, তেমন hasপদ্ধতিও রয়েছে যা ব্যবহারের ক্ষেত্রে সহায়ক হবে তবে মূলত যা বর্ণিত হয়েছে তা থেকে setআরও কার্যকর হতে পারে। ধরা যাক আপনি যেমনটি উল্লেখ করেছেন তেমনভাবে এই বস্তুটিতে কিছু যুক্ত করতে চেয়েছিলেন:

let dynamicKey = 'someCrazyProperty';
let dynamicValue = 'someCrazyValue';

_.set( myObject.options, dynamicKey, dynamicValue );

মূল বর্ণনার উপর ভিত্তি করে আমি এটি কীভাবে করব।


2

উদাহরণস্বরূপ বস্তুর নীচে নিতে দেয়

let obj = { property1: 'value 1', property2: 'value 2'};

প্রথমে আপত্তিটিতে সমস্ত কী আনুন

let keys = Object.keys(obj) //it will return array of keys

এবং তারপরে লুপ করুন

keys.forEach(key => //your way)

শুধু সব একসাথে রাখা

Object.keys(obj).forEach(key=>{/*code here*/})

1

ES6 এ, for..ofলুপটি ব্যবহার করে কোনও অবজেক্টের মানগুলি নিয়ে পুনরাবৃত্তি করাও সম্ভব । এটি জাভাস্ক্রিপ্ট অবজেক্টগুলির জন্য বাক্সের ঠিক বাইরে কাজ করে না, তবে আপনাকে অবশ্যই অবজেক্টটিতে একটি @@ পুনরায় সংখ্যক সংজ্ঞা দিতে হবে। এটি নিম্নলিখিত হিসাবে কাজ করে:

  • for..ofলুপ ধারাবাহিকভাবে দেওয়া পুনরুক্তিকারীর বস্তুর উপর পরবর্তী () মেথড কলিং এবং প্রতিটি পুনরাবৃত্তির জন্য মান হিসাবে ফিরে মান ব্যবহার করে বলছেন "বস্তুর উপরে iterated করা" (এর কোনো ইটারেটরে বস্তুর জন্য এটা obj1 কল করা যাক। Obj1 উপর লুপ iterates লুপ
  • পুনরুক্তি করা অবজেক্টটি অবজেক্ট 1 এর @@ পুনরাবৃত্ত সম্পত্তি বা সিম্বল.ইটিটার সম্পত্তি হিসাবে সংজ্ঞায়িত ফাংশনটি চাওয়ার মাধ্যমে প্রাপ্ত হয় is এটি আপনাকে নিজের সংজ্ঞায়িত করতে হবে এমন ফাংশন এবং এটির পুনরাবৃত্তিকারী বস্তুটি ফিরিয়ে আনা উচিত

এখানে একটি উদাহরণ:

const obj1 = {
  a: 5,
  b: "hello",
  [Symbol.iterator]: function() {
    const thisObj = this;
    let index = 0;
    return {
      next() {
        let keys = Object.keys(thisObj);
        return {
          value: thisObj[keys[index++]],
          done: (index > keys.length)
        };
      }
    };
  }
};

এখন আমরা for..ofলুপটি ব্যবহার করতে পারি :

for (val of obj1) {
  console.log(val);
}    // 5 hello

0

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

myObject.options.hasOwnProperty('property');

যদি আপনার সন্ধানের কোনও মান বিদ্যমান কিনা তা দেখতে আপনি ব্যবহার করতে পারেন _.invert

_.invert(myObject.options)[value]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.