किसी वस्तु का पहला सूचकांक प्राप्त करना


201

विचार करें:

var object = {
  foo: {},
  bar: {},
  baz: {}
}

यह मैं कैसे करूंगा:

var first = object[0];
console.log(first);

जाहिर है, यह काम नहीं करता है क्योंकि पहले सूचकांक का नाम है foo, नहीं 0

console.log(object['foo']);

काम करता है, लेकिन मुझे नहीं पता कि इसका नाम फू है। इसे कुछ भी नाम दिया जा सकता है। मुझे बस पहला चाहिए।

जवाबों:


61

यदि ऑब्जेक्ट का क्रम महत्वपूर्ण है, तो आपको ऑब्जेक्ट में किसी सरणी में स्टोर करने के लिए अपने JSON स्कीमा को संशोधित करना चाहिए:

[
    {"name":"foo", ...},
    {"name":"bar", ...},
    {"name":"baz", ...}
]

या हो सकता है:

[
    ["foo", {}],
    ["bar", {}],
    ["baz", {}]
]

जैसा कि बेन अल्परट बताते हैं, जावास्क्रिप्ट ऑब्जेक्ट्स के गुण अनियंत्रित हैं, और आपका कोड टूट गया है यदि आप उनसे उसी क्रम में गणना करने की अपेक्षा करते हैं कि वे ऑब्जेक्ट शाब्दिक में निर्दिष्ट हैं - कोई "प्रथम" गुण नहीं है।


6
मैंने कभी नहीं देखा है (मैं obj में) चीजों को एक अलग क्रम में करता हूं, क्या आप कह रहे हैं कि कभी-कभी (मैं obj में) चीजों को एक अलग क्रम में बाहर निकाल दूंगा?
रयान फ्लोरेंस

4
यह संभव है कि यह होगा। चश्मा कहता है कि इसे एक विशिष्ट क्रम में गणना करने की आवश्यकता नहीं है। यह बहुत ज्यादा मतलब है कि आदेश बदल सकता है।
पेट्रीकस्ट्रैन्ड

5
इन दिनों अधिकांश ब्राउज़र प्रविष्टि क्रम को संरक्षित करते हैं, लेकिन यह हमेशा ऐसा नहीं था; यह युक्ति द्वारा आवश्यक नहीं है, और क्रोम के हाल के संस्करण थे जो प्रविष्टि क्रम को संरक्षित नहीं करते थे।
मीलों

1
जैसे-जैसे मैं चीजों का क्रम बढ़ाता गया, मैं और अधिक महत्वपूर्ण होता गया (मुझे लगा कि मैंने केवल पहले की परवाह की है, लेकिन मैं गलत था!) ​​इसलिए मेरी वस्तुओं को एक सरणी में संग्रहीत करना स्पष्ट था जैसा कि आपने सुझाया है।
रयान फ्लोरेंस

1
यदि आप जानते हैं कि ऑब्जेक्ट में केवल एक तत्व है, तो आप ऑर्डर जानते हैं।
danorton

329

बस मज़े के लिए जेएस 1.8.5 में यह काम करता है

var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"

यह उसी क्रम से मेल खाता है जिसे आप करते हुए देखेंगे

for (o in obj) { ... }

24
जब तक पत्थर की आयु की अनुकूलता की आवश्यकता न हो, तब तक सबसे अच्छा विकल्प साफ़ करें।
दाग सोंडेरे हैनसेन

1
100% सबसे अच्छा जवाब। यह ऐसा करने का सबसे आसान और सबसे तेज़ तरीका है।
केस

3
बस स्पष्ट करने के लिए, en.wikipedia.org/wiki/JavaScript#Version_history JS 1.8.5 के अनुसार, पूर्व IE9 समर्थित नहीं है। दुर्भाग्य से कई लोग अभी भी पाषाण युग में हैं।
नोर्मैक

महान एक। छोटा और सरल। धन्यवाद @ जेकॉब
सरिबान डी '21

अगर कोई IE9 if का उपयोग कर रहा है तो मुझे उसका दर्द महसूस होगा। यह आश्चर्यजनक है
CMS

204

यदि आप कुछ संक्षिप्त प्रयास करना चाहते हैं:

for (first in obj) break;

alert(first);

एक समारोह के रूप में लिपटे:

function first(obj) {
    for (var a in obj) return a;
}

8
नीचे ल्यूक शेफ़र का उत्तर देखें, यह प्रोटोटाइप सदस्यों को हड़पने के लिए सुनिश्चित करने के लिए hasOwnProperty विधि का उपयोग करता है।
कोड कमांडर

3
IE8 और नीचे उपयोग सहित सभी ब्राउज़रों में काम करने के लिए एक लाइनर के लिए for (var key in obj) if (obj.hasOwnProperty(key)) break;आप फिर keyचर का उपयोग करना चाहते हैं
सहयोगी

पहला तत्व ऑब्जेक्ट प्रकार है, तो काम नहीं करता है। रिटर्न 0
बर्फ

Object.keys(obj)[0];(1.644ms) की तुलना में बहुत तेज (0.072ms) है for
सेबेस्टियन ऑर्टमैन

77

वे वास्तव में आदेश नहीं दिया गया है, लेकिन आप कर सकते हैं:

var first;
for (var i in obj) {
    if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
        first = obj[i];
        break;
    }
}

.hasOwnProperty()नमूने के वस्तुओं की अनदेखी करने के लिए महत्वपूर्ण है।


उपरोक्त कोड में कोई त्रुटि है।
टाइपोफ़

@ नेपालम वह चर नाम में त्रुटि की बात कर रहा था, सिंटैक्स नहीं। आप सही हैं, लेकिन बहुत से लोग पठनीयता के लिए ब्रैकेटिंग पसंद करते हैं
ल्यूक शेफर

धन्यवाद। यह आश्चर्यजनक है।
संतोष

76

यह आपको पहले वाला नहीं देगा क्योंकि जावास्क्रिप्ट ऑब्जेक्ट्स अनियंत्रित हैं, हालांकि यह कुछ मामलों में ठीक है।

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

39

ऑब्जेक्ट की पहली कुंजी के लिए आप उपयोग कर सकते हैं

console.log(Object.keys(object)[0]);//print key's name

मूल्य के लिए

console.log(object[Object.keys(object)[0]]);//print key's value

18

पहला तत्व प्राप्त करने का कोई तरीका नहीं है, जावास्क्रिप्ट में "हैश" (ऑब्जेक्ट्स) के रूप में देखने से असमान गुण होते हैं। आपकी सबसे अच्छी शर्त एक सरणी में कुंजियों को संग्रहीत करना है:

var keys = ["foo", "bar", "baz"];

फिर उचित मूल्य प्राप्त करने के लिए इसका उपयोग करें:

object[keys[0]]

16

ES6

const [first] = Object.keys(obj)

यह काम करता है, लेकिन क्या आप बता सकते हैं कि यह कैसे काम करता है? बस कोड दिखाने से मुझे यह समझ में नहीं आता है।
दान

1
यह एक विनाशकारी असाइनमेंट है । अनिवार्य रूप से, यह वर्ग कोष्ठक के भीतर चर में दिए गए सरणी का पहला तत्व प्रदान करता है।
रिचर्ड अयोटे

12

अंडरस्कोर का उपयोग करके आप मुख्य मान जोड़ी के रूप में पहली वस्तु प्रविष्टि प्राप्त करने के लिए _. जोड़े का उपयोग कर सकते हैं:

_.pairs(obj)[0]

तब कुंजी एक और [0]सबस्क्रिप्ट, मूल्य के साथ उपलब्ध होगी[1]


सबसे अच्छा काम करता है जब अंडरस्कोर। Js इस्तेमाल किया जाता है। बस मुझे क्या चाहिए ... शुक्रिया, जॉर्ज!
गोल्डेंगलक्सी

10

कल भी मुझे यही समस्या थी। मैंने इसे इस तरह हल किया:

var obj = {
        foo:{},
        bar:{},
        baz:{}
    },
   first = null,
   key = null;
for (var key in obj) {
    first = obj[key];
    if(typeof(first) !== 'function') {
        break;
    }
}
// first is the first enumerated property, and key it's corresponding key.

सबसे सुरुचिपूर्ण समाधान नहीं है, और मुझे पूरा यकीन है कि यह अलग-अलग ब्राउज़रों में अलग-अलग परिणाम दे सकता है (यानी चश्मा कहता है कि गुणों को उसी क्रम में गणना करने की आवश्यकता नहीं है क्योंकि वे परिभाषित किए गए थे)। हालाँकि, मेरे पास केवल एक ही वस्तु थी, जो एक गैर-मुद्दा था। मुझे सिर्फ पहली कुंजी की जरूरत थी।


1
हाय @PatrikAkerstrand जल्दी मैंने गलती से डाउनवोट में क्लिक किया। कृपया इसे पूर्ववत करने के लिए अपने anwser में कोई भी बदलाव करें। माफ़ करना।
रोजरियोलिनो

7

आप ऐसा कुछ कर सकते हैं:

var object = {
    foo:{a:'first'},
    bar:{},
    baz:{}
}


function getAttributeByIndex(obj, index){
  var i = 0;
  for (var attr in obj){
    if (index === i){
      return obj[attr];
    }
    i++;
  }
  return null;
}


var first = getAttributeByIndex(object, 0); // returns the value of the
                                            // first (0 index) attribute
                                            // of the object ( {a:'first'} )

6

अपनी वस्तु की पहली कुंजी प्राप्त करना

const myObject = {
   'foo1': { name: 'myNam1' },
   'foo2': { name: 'myNam2' }
}

const result = Object.keys(myObject)[0];

// result will return 'foo1'

याकूब के इस उत्तर के अंतर क्या हैं?
याकॉव

यह नवसिखुआ को विश्वास दिलाता है कि इस तरह का कोड पूरी तरह से काम करता है।
संतोष

5

सीएमएस जवाब के आधार पर । मुझे सीधे मान नहीं मिलता है, इसके बजाय मैं इसके सूचकांक पर कुंजी लेता हूं और मूल्य प्राप्त करने के लिए इसका उपयोग करता हूं:

Object.keyAt = function(obj, index) {
    var i = 0;
    for (var key in obj) {
        if ((index || 0) === i++) return key;
    }
};


var obj = {
    foo: '1st',
    bar: '2nd',
    baz: '3rd'
};

var key = Object.keyAt(obj, 1);
var val = obj[key];

console.log(key); // => 'bar'
console.log(val); // => '2nd'

2

मेरा समाधान:

Object.prototype.__index = function(index)
{
    var i = -1;
    for (var key in this)
    {
        if (this.hasOwnProperty(key) && typeof(this[key])!=='function')
            ++i;
        if (i >= index)
            return this[key];
    }
    return null;
}
aObj = {'jack':3, 'peter':4, '5':'col', 'kk':function(){alert('hell');}, 'till':'ding'};
alert(aObj.__index(4));

12
अच्छा एक, केवल ... आपकी कोडिंग शैली! क्या बकवास है? उन ब्रेसिज़ हर जगह हैं!
उड़ान भेड़

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