কোনও অবজেক্টের প্রথম সূচক প্রাপ্ত


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
আমি কখনও দেখিনি (আমি আপত্তি করছি) কোনও আলাদা ক্রমে জিনিসগুলি করি, আপনি কি বলছেন যে কখনও কখনও (আমি আপত্তি জানাতে পারি) জিনিসগুলি একটি ভিন্ন ক্রমে বের করে দেই?
রায়ান ফ্লোরেন্স

4
এটা সম্ভব যে এটি সম্ভব। চশমা বলে যে এটি একটি নির্দিষ্ট ক্রমে গণনা করতে হবে না। এটি বেশিরভাগ অর্থ এই যে ক্রমটি পরিবর্তিত হতে পারে।
প্যাট্রিক একারস্ট্রান্ড

5
আজকাল বেশিরভাগ ব্রাউজারগুলি সন্নিবেশ ক্রম সংরক্ষণ করে তবে এটি সর্বদা তেমন ছিল না; এটি অনুমান দ্বারা প্রয়োজন হয় না, এবং Chrome এর সাম্প্রতিক সংস্করণগুলি ছিল যা সন্নিবেশ ক্রম সংরক্ষণ করে না।
মাইল

1
আমি যখন জিনিসগুলি ক্রম করছিলাম তখন তার ক্রমটি আরও গভীর হয়ে উঠল (আমি ভেবেছিলাম যে আমি কেবল প্রথমটির যত্ন নিই তবে আমার ভুল ছিল!) সুতরাং আপনার পরামর্শ অনুসারে আমার জিনিসগুলি অ্যারেতে সংরক্ষণ করা স্পষ্ট ছিল।
রায়ান ফ্লোরেন্স

1
যদি আপনি জানেন যে অবজেক্টটির কেবল একটি উপাদান রয়েছে, তবে আপনি ক্রমটি জানেন।
ড্যানোর্টন

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 জাতীয় 1.8.5 প্রাক IE9 সমর্থিত নয়। দুর্ভাগ্যক্রমে অনেক মানুষ এখনও প্রস্তর যুগে রয়েছেন।
নোরাম্যাক

ভাল একটা. সংক্ষিপ্ত এবং সহজ। ধন্যবাদ @ জ্যাকব
সারিবান ডি সিএল

যদি কেউ আই 9 ব্যবহার করে 😏 আমি তার ব্যথা অনুভব করি। ধন্যবাদ এটি আশ্চর্যজনক
সিএমএস

204

আপনি যদি কিছু সংক্ষিপ্ত চেষ্টা করতে চান:

for (first in obj) break;

alert(first);

একটি ফাংশন হিসাবে আবৃত:

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

8
নীচে লুক স্ক্যাফারের উত্তর দেখুন, আপনি প্রোটোটাইপ সদস্যদের না ধরেন তা নিশ্চিত করতে এটি hasnOnProperty পদ্ধতি ব্যবহার করে।
কোড কমান্ডার

3
IE8 এবং নীচে ব্যবহার সহ সমস্ত ব্রাউজারে কাজ করার জন্য একটি লাইনারের জন্য for (var key in obj) if (obj.hasOwnProperty(key)) break;আপনি তারপরে keyভেরিয়েবলটি ব্যবহার করতে চাইবেন
অ্যালি

প্রথম উপাদানটি কোনও বস্তুর ধরণ হলে কাজ করে না। ফেরৎ 0
তুষার

Object.keys(obj)[0];(1.644ms) এর চেয়ে অনেক দ্রুত (0.072ms) foris
সেবাস্তিয়ান অর্টম্যান

77

সেগুলি সত্যই অর্ডার করা হয়নি তবে আপনি এটি করতে পারেন:

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

.hasOwnProperty()prototyped বস্তু উপেক্ষা করার গুরুত্বপূর্ণ।


উপরের কোডটিতে একটি ত্রুটি রয়েছে।
টাইপফের চেকটি টাইপফ

@ নেপলাম তিনি ভেরিয়েবলের নাম যাচাই করা হচ্ছে, সিনট্যাক্সের পরিবর্তে ত্রুটির কথা উল্লেখ করছেন। আপনি ঠিক বলেছেন, তবে অনেকের পঠনযোগ্যতার জন্য বন্ধনী পছন্দ হয়েছে
লুক স্ক্যাফার

ধন্যবাদ. এটা আশ্চর্যজনক.
সন্তোষ

76

এটি আপনাকে প্রথমটি দেবে না কারণ জাভাস্ক্রিপ্ট অবজেক্টগুলি আনর্ডার্ড করা হয়েছে, তবে কিছু ক্ষেত্রে এটি ঠিক আছে।

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


18

প্রথম উপাদানটি পাওয়ার কোনও উপায় নেই, জাভাস্ক্রিপ্টে "হ্যাশ" (অবজেক্টস) হিসাবে আনর্ডার্ড বৈশিষ্ট্য রয়েছে দেখে seeing আপনার সেরা বাজিটি একটি অ্যারেতে কীগুলি সংরক্ষণ করা হয়:

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

তারপরে যথাযথ মান পেতে এটি ব্যবহার করুন:

object[keys[0]]

16

ES6

const [first] = Object.keys(obj)

এটি কাজ করে, তবে কীভাবে এটি কাজ করে তা দয়া করে ব্যাখ্যা করতে পারেন? কোডটি প্রদর্শন করা আমাকে এটি বুঝতে ব্যর্থ করে।
দান

1
এটা একটা ব্যাপার ডেসট্রাকচারিং অ্যাসাইনমেন্ট । মূলত, এটি বর্গাকার বন্ধনীগুলির মধ্যে ভেরিয়েবলটিতে ফিরে আসা অ্যারের প্রথম উপাদান নির্ধারণ করে।
রিচার্ড আয়টটি

12

আন্ডারস্কোর ব্যবহার করে আপনি _. জোড়া ব্যবহার করতে পারেন কোনও মূল মান জুটি হিসাবে প্রথম অবজেক্টটি প্রবেশের জন্য:

_.pairs(obj)[0]

তারপর কী আরও সঙ্গে পাওয়া যাবে [0]সাবস্ক্রিপ্ট, সঙ্গে মান[1]


আন্ডারস্কোর.জে ব্যবহার করা হলে সবচেয়ে ভাল কাজ করে। আমার যা দরকার ছিল ... ধন্যবাদ জর্জ!
গোল্ডেনগ্যালাক্সি

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.

সর্বাধিক মার্জিত সমাধান নয়, এবং আমি নিশ্চিত যে এটি বিভিন্ন ব্রাউজারে বিভিন্ন ফলাফল আনতে পারে (আমি স্পেসগুলি বলে যে বৈশিষ্ট্যগুলি যেমন সংজ্ঞায়িত করা হয়েছিল ঠিক একই ক্রমে অঙ্ক করার প্রয়োজন নেই) pretty তবে, আমার অবজেক্টে কেবলমাত্র আমার একক সম্পত্তি ছিল তাই এটি ছিল একটি ইস্যু। আমার কেবল প্রথম চাবিটি দরকার ছিল।


1
হাই @ প্যাট্রিক অ্যাকার্সট্রান্ড খুব তাড়াতাড়ি আমি দুর্ঘটনাক্রমে ডাউনটাতে ক্লিক করেছি। আমি এটিকে পূর্বাবস্থায় ফেরাতে দয়া করে আপনার আনসারটিতে কোনও পরিবর্তন করুন। দুঃখিত।
রোজারিওলিনো

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
আপনি কি অজগর স্টাইল জানেন? আমি কেবল পাইথন স্টাইলে উল্লম্ব-প্রান্তিকৃত বন্ধনীগুলি যুক্ত করেছি। যাইহোক, "জাহান্নাম অন্যান্য লোক", :
ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.