कुंजी / मान जावास्क्रिप्ट ऑब्जेक्ट की कुंजी प्राप्त करने का सबसे अच्छा तरीका


183

अगर मेरे पास जेएस ऑब्जेक्ट है जैसे:

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

अगर मुझे पता है कि fooउस मूल कुंजी / मूल्य संरचना है, लेकिन कुंजी का नाम नहीं जानते, तो इसे प्राप्त करने का सबसे आसान तरीका क्या है? for ... in? $.each()? मुझे उम्मीद है कि कुछ बेहतर होगा ...।


5
... इसमें क्या गलत है?
मैट

1
यह अप्रत्यक्ष लगता है और आपको hasOwnProperty का उपयोग करना होगा। मुझे लगता है कि मैं एक पुस्तकालय समारोह
बनाऊंगा

जवाबों:


93

यदि आप सभी कुंजियाँ प्राप्त करना चाहते हैं, तो ECMAScript 5 पेश किया गया हैObject.keys । यह केवल नए ब्राउज़रों द्वारा समर्थित है लेकिन MDC प्रलेखन एक वैकल्पिक कार्यान्वयन प्रदान करता है (जो कि for...inbtw का उपयोग करता है ):

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मुझे कुंजी देता है लेकिन मुझे कुंजी का मूल्य कैसे मिलता है? धन्यवाद।
Si8

1
दोनों कुंजियों और मूल्यों के लिए, नए Object.entries () developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Kzqai

शायद यह मेरी सीमित समझ का एक संकेत है, लेकिन यह उत्तर एक कुंजी / मूल्य प्राप्त करने के रूप में कुछ के लिए अविश्वसनीय रूप से क्रिया (पुन: प्रयोज्य) लगता है। क्या @Michael बेनिन जवाब को सर्वश्रेष्ठ के रूप में चिह्नित नहीं किया जाना चाहिए?
एरोन मैथ्यूज

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_"?
user2284570


क्या होगा यदि मैं चेतावनी नहीं करना चाहते () foo[i]करता है, तो iहै some string?
user2284570

@ user2284570: मैं एक स्ट्रिंग हो सकता है - कोई समस्या नहीं।
गेरफ्रीड

क्या आपके लिए इसका मतलब नहीं है (Object ikeys (foo) में var i) {
samurai jack

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

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 () जावास्क्रिप्ट विधि है जो ऑब्जेक्ट्स का उपयोग करते समय कुंजियों की एक सरणी लौटाती है।

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"
}

एमडीएन देखें


9

मैं इसके अलावा और कुछ नहीं देखता हूं for (var key in foo)


4

इसके अलावा कोई रास्ता नहीं है for ... in। यदि आप इसका इस्तेमाल नहीं करना चाहते हैं (तोपिंग क्योंकि यह hasOwnPropertyप्रत्येक पुनरावृत्ति पर परीक्षण करने के लिए मामूली अक्षम है; ) तो एक अलग निर्माण का उपयोग करें, उदाहरण के लिए kvp की एक सरणी:

[{ 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

सबसे आसान तरीका सिर्फ अंडरस्कोर.ज का उपयोग करना है:

चांबियाँ

_.key (ऑब्जेक्ट) ऑब्जेक्ट के गुणों के सभी नामों को पुनः प्राप्त करें।

_.keys ({एक: 1, दो: 2, तीन: 3}); => ["एक", "दो", "तीन"]

हां, आपको एक अतिरिक्त पुस्तकालय की आवश्यकता है, लेकिन यह इतना आसान है!


4
@lonesomeday हाँ, लेकिन अंडरस्कोर / लॉश कई अन्य तरीकों से उपयोगी है, इसलिए इसे लाने लायक है।
jcollum

4

Object.keys () Object.keys () विधि किसी दिए गए ऑब्जेक्ट के स्वयं के असंख्य गुणों की एक सरणी देता है, उसी क्रम में जो एक के लिए प्रदान की जाती है ... लूप में (अंतर यह है कि फॉर-इन लूप गुणों की गणना करता है) प्रोटोटाइप श्रृंखला में भी)।

var arr1 = Object.keys(obj);

Object.values ​​() Object.values ​​() विधि किसी दिए गए ऑब्जेक्ट के स्वयं के असंख्य गुण मानों की एक सरणी देता है, उसी क्रम में जो एक के लिए प्रदान किया जाता है ... लूप में (अंतर यह है कि फॉर-लूप एन्यूमरेट करता है) प्रोटोटाइप श्रृंखला में गुण)।

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

आप चाबियाँ प्राप्त करने के लिए Object.keys कार्यक्षमता का उपयोग कर सकते हैं:

const tempObjects={foo:"bar"}

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

0

एक स्ट्रिंग के रूप में दिखाने के लिए, बस उपयोग करें:

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

0

वस्तु की कुंजी / मूल्य प्राप्त करने का सर्वोत्तम तरीका।

let obj = {
        'key1': 'value1',
        'key2': 'value2',
        'key3': 'value3',
        'key4': 'value4'
    }
    Object.keys(obj).map(function(k){ 
    console.log("key with value: "+k +" = "+obj[k])    
    
    })
    

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.