কোনও কী / মান জাভাস্ক্রিপ্ট অবজেক্টের কী পাওয়ার সেরা উপায়


183

আমার কাছে যদি জেএস বস্তু থাকে তবে:

var foo = { 'bar' : 'baz' }

যদি আমি জানতে পারি যে fooসেই বেসিক কী / মান কাঠামো আছে তবে কীটির নামটি জানেন না, এটি পাওয়ার সহজতম উপায় কী? for ... in? $.each()? আমি আশা করি এর থেকে আরও ভাল কিছু আছে ....


5
... এর সাথে কী ভুল?
ম্যাট

1
এটি পরোক্ষ অনুভূত হয় এবং আপনার haswwProperty ব্যবহার করতে হবে। আমার ধারণা আমি এটি একটি লাইব্রেরি ফাংশন করব যা এটি করে ....
স্প্রোগম্যান

উত্তর:


93

আপনি যদি সমস্ত কী পেতে চান তবে ECMAScript 5 চালু করা হয়েছেObject.keys । এটি কেবলমাত্র নতুন ব্রাউজারগুলির দ্বারা সমর্থিত তবে এমডিসি ডকুমেন্টেশন একটি বিকল্প বাস্তবায়ন সরবরাহ করে (যা for...inবিটিডব্লুও ব্যবহার করে ):

if(!Object.keys) Object.keys = function(o){
     if (o !== Object(o))
          throw new TypeError('Object.keys called on non-object');
     var ret=[],p;
     for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
     return ret;
}

অবশ্যই আপনি যদি কী এবং মান উভয়ই চান for...inতবে একমাত্র যুক্তিযুক্ত সমাধান।


pআমাকে কী দেয় তবে আমি কীটির মান পাব? ধন্যবাদ।
সি 8

1
কী এবং মান উভয়ের জন্যই নতুন অবজেক্ট.এন্ট্রি () বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

সম্ভবত এটি আমার সীমিত বোঝার একটি ইঙ্গিত, তবে এই উত্তরটি কোনও কী / মান পাওয়ার মতো সাধারণ কোনও কিছুর জন্য অবিশ্বাস্যভাবে ভার্বোজ (স্বীকৃত পুনরায় ব্যবহারযোগ্য) বলে মনে হয়। @ মিশেল বেনিনের উত্তরটি কি সেরা হিসাবে চিহ্নিত করা উচিত নয়?
অ্যারন ম্যাথিউজ

7
এরম ... প্রথম লিঙ্কে ক্লিক করা অন্য কেউ কি অজ্ঞাতনামা মাদকে পুনঃনির্দেশিত হন?
জন ডাসকিন

191

আপনি লুপটির জন্য অবজেক্টের ভিতরে পুনরাবৃত্তি করতে পারেন:

for(var i in foo){
  alert(i); // alerts key
  alert(foo[i]); //alerts key's value
}

অথবা

Object.keys(foo)
  .forEach(function eachKey(key) { 
    alert(key); // alerts key 
    alert(foo[key]); // alerts value
  });

আমি যদি না foo[i]হতে চাই "_proto_"?
ব্যবহারকারী 2284570


আমি যদি সতর্ক করতে না চাই () foo[i]যদি iহয় some string?
ব্যবহারকারী 2284570

@ ব্যবহারকারী 2284570: আমি স্ট্রিং হতে পারি - কোনও সমস্যা নেই।
গ্লিফ্রিড

(ওজেক্ট.কিজ (ভুতে) এর জন্য আমি) {
সামুরাই জ্যাক

103

এ হিসাবে পুনরাবৃত্তি না করে আপনি প্রতিটি কী পৃথকভাবে অ্যাক্সেস করতে পারবেন:

var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second

3
আপনি এখন এই উদ্দেশ্যে স্প্রেড অপারেটরটি ব্যবহার করতে পারেন, এটি আরও ভাল দেখাচ্ছে: const [firstKey, ...rest] = Object.keys(obj);
নারলিন

65

আপনার অবজেক্ট দেওয়া:

var foo = { 'bar' : 'baz' }

পেতে bar, ব্যবহার করুন:

Object.keys(foo)[0]

পেতে baz, ব্যবহার করুন:

foo[Object.keys(foo)[0]]

একক বস্তু ধরে নেওয়া


26

একজন এক মাছ ধরার নৌকা তোমার জন্য:

const OBJECT = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3',
    'key4': 'value4'
};

const value = 'value2';

const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];

window.console.log(key); // = key2

25

এটি সহজ এবং সহজ উপায়। আমরা এইভাবেই করি।

var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
     
 console.log("key = ", key) // bar
 console.log("value = ", value) // baz
অবজেক্ট.কিজ () হ'ল জাভাস্ক্রিপ্ট পদ্ধতি যা অবজেক্টগুলিতে ব্যবহার করার সময় কীগুলির একটি অ্যারের ফিরিয়ে দেয়।

Object.keys(obj) // ['bar']

এখন আপনি অবজেক্টগুলিতে পুনরাবৃত্তি করতে পারেন এবং নীচের মতো মানগুলি অ্যাক্সেস করতে পারেন-

Object.keys(obj).forEach( function(key) {
  console.log(obj[key]) // baz
})

আপনি TypeErrorকীটি একটি নম্বর হওয়ার প্রত্যাশা করলে আপনি পেতে পারেন। কারণ কীগুলি সর্বদা স্ট্রিং থাকে।
সবুজ

15

আমারও একই সমস্যা ছিল এবং এটিই কাজ করেছিল

//example of an Object
var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

//How to access a single key or value
var key = Object.keys(person)[0];
var value = person.firstName;

11
কেন না var value = person[key];? এইভাবে আপনাকে যে মানটি টানতে চান তার কীটি জানতে হবে না।
শান কেন্ডেল

14
// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

MDN উল্লেখ করুন


9

আমি ছাড়া আর কিছু দেখতে পাচ্ছি না for (var key in foo)


4

ছাড়া উপায় নেই for ... in। আপনি যদি এটি ব্যবহার করতে না চান ( hasOwnPropertyপ্রতিটি পুনরাবৃত্তির উপর পরীক্ষা করার জন্য এটি সামান্য অক্ষম ? কারণ) আলাদা আলাদা কনস্ট্রাক্ট ব্যবহার করুন, যেমন কেভিপি'র একটি অ্যারে:

[{ key: 'key', value: 'value'}, ...]

4

যেহেতু আপনি উল্লেখ করেছেন $.each(), এখানে একটি কার্যকর পন্থা যা jQuery 1.6+ এ কাজ করবে:

var foo = { key1: 'bar', key2: 'baz' };

// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
  return key;
});

4

সবচেয়ে সহজ উপায় হ'ল অ্যান্ডস্কোর.জেএস ব্যবহার করা:

কী

_.keys (অবজেক্ট) অবজেক্টের বৈশিষ্ট্যের সমস্ত নাম পুনরুদ্ধার করুন।

_.কিজ ({এক: 1, দুই: 2, তিন: 3}); => ["একটি", "দুই", "তিন"]

হ্যাঁ, আপনার একটি অতিরিক্ত গ্রন্থাগার দরকার তবে এটি এত সহজ!


4
@ একাকী দিন হ্যাঁ, তবে আন্ডারস্কোর / লড্যাশ অন্যান্য অনেক উপায়ে কার্যকর, তাই এটি সামনে আনার মতো।
jcollum

4

অবজেক্ট.কিজ () অবজেক্ট.কিজ () পদ্ধতিটি প্রদত্ত বস্তুর নিজস্ব গুণমানের বৈশিষ্ট্যগুলির একটি অ্যারে প্রদান করে, লুপের জন্য ... এর জন্য প্রদত্ত একই ক্রমে (পার্থক্যটি হ'ল লুপের জন্য বৈশিষ্ট্যগুলি গণনা করে) প্রোটোটাইপ চেইনেও)।

var arr1 = Object.keys(obj);

অবজেক্ট.ভ্যালু () অবজেক্ট.ভ্যালু () পদ্ধতিটি প্রদত্ত বস্তুর নিজস্ব গণ্য সম্পত্তি মানগুলির একটি অ্যারে প্রদান করে, লুপের জন্য ... এর জন্য প্রদত্ত একই ক্রমে (পার্থক্যটি হ'ল লুপটি গণনা করে) প্রোটোটাইপ চেইনে বৈশিষ্ট্যগুলিও)।

var arr2 = Object.values(obj);

আরও জন্য দয়া করে এখানে যান


3

জাভাস্ক্রিপ্টে অবজেক্ট বা মানচিত্রের কীগুলি অ্যাক্সেসের জন্য প্রতিটি লুপের জন্য ব্যবহার করুন

for(key in foo){
   console.log(key);//for key name in your case it will be bar
   console.log(foo[key]);// for key value in your case it will be baz
}

দ্রষ্টব্য: আপনি ব্যবহার করতে পারেন

Object.keys (foo বিন্যাস);

এটি আপনাকে এই আউটপুটটির মতো দেবে:

[দণ্ড];



1

আপনি কীগুলি পেতে অবজেক্ট.কিজ কার্যকারিতাটি ব্যবহার করতে পারেন:

const tempObjects={foo:"bar"}

Object.keys(tempObjects).forEach(obj=>{
   console.log("Key->"+obj+ "value->"+tempObjects[obj]);
});

0

স্ট্রিং হিসাবে দেখানোর জন্য, সহজভাবে ব্যবহার করুন:

console.log("they are: " + JSON.stringify(foo));

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