কিভাবে জাভাস্ক্রিপ্ট অবজেক্টের প্রথম সম্পত্তি অ্যাক্সেস করবেন?


610

কোনও জিনিসের প্রথম সম্পত্তি অ্যাক্সেস করার জন্য কি কোনও দুর্দান্ত উপায় আছে ...

  1. যেখানে আপনি আপনার সম্পত্তিগুলির নাম জানেন না
  2. for .. injQuery এর মতো লুপ ব্যবহার না করে$.each

উদাহরণস্বরূপ, foo1foo1 এর নাম না জেনে আমার অবজেক্ট অ্যাক্সেস করা দরকার :

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

1
এটিকে প্রথমে অ্যারেতে রূপান্তর করা সম্ভবত আরও ভাল
ক্রেগক্স

উত্তর:


1391
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'

এটি ব্যবহার করে আপনি সূচী দ্বারা অন্যান্য বৈশিষ্ট্যও অ্যাক্সেস করতে পারেন। সচেতন থাকুন! Object.keysইসমাস্ক্রিপ্ট অনুসারে রিটার্ন অর্ডারটির গ্যারান্টি নেই তবে আনুষ্ঠানিকভাবে এটি সমস্ত বড় ব্রাউজার বাস্তবায়ন দ্বারা হয়, দয়া করে এই সম্পর্কে বিস্তারিত জানতে https://stackoverflow.com/a/23202095 পড়ুন ।


25
আপনি বলছেন যে এটি সবচেয়ে দ্রুততম উপায় নয়। কীভাবে দ্রুত হবে?
টি এনগুইন

3
এটি খুব কার্যকর নয় কারণ এটি বস্তুর সমস্ত কীগুলির একটি সম্পূর্ণ অ্যারে তৈরি করে।
অ্যান্ড্রু মাও

9
@ টি এনগুইন আমি যদি এটি জানতাম তবে এটি পোস্ট করতাম :)
গ্রেজগোর্জ কাজান

5
@ ডেভচানা - আপনার বেঞ্চমার্কটি ভুল সেট আপ হয়েছে। Boilerplate, ব্লক সবসময় মৃত্যুদন্ড কার্যকর করা হবে এবং আপনার ব্লক 2 খালি ছিল, প্রথম ফলাফলের অর্থ সঞ্চালনের প্রতিনিধিত্ব করে boilerplate, + + block1 , এবং দ্বিতীয় ফলাফলের শুধুমাত্র প্রতিনিধিত্ব করে boilerplate,এখানে সঠিক বেঞ্চমার্কটি দেওয়া হয়েছে: http://jsben.ch/#/R9aLQ , দেখায় যে তারা বেশ সমান (একাধিকবার পরীক্ষা চালান)।
myfunkyside

9
আমি ইচ্ছুক first()বা অনুরূপ কিছু এটি পরিচালনা করতে পারে।
Fr0zenFyr

113

প্রথম পুনরাবৃত্তির পরে for … inলুপটি চেষ্টা করুন এবং বিরতি দিন:

for (var prop in object) {
    // object[prop]
    break;
}

1
আমি মনে করি এটি একমাত্র বিকল্প সম্পর্কে। আমি নিশ্চিত নই যে আপনি গ্যারান্টিযুক্ত যে সম্পত্তিগুলি পূর্বাভাসযোগ্য / দরকারী ক্রমে পুনরাবৃত্তি হবে। অর্থাৎ, আপনি foo1 করতে পারেন তবে foo3 পান। উদাহরণ হিসাবে যেমন বৈশিষ্ট্যগুলি নম্বরযুক্ত হয়, আপনি '1' এ শেষ হওয়া শনাক্তকারী সনাক্তকরণের জন্য একটি স্ট্রিং করতে পারেন। তারপরে আবারও যদি অর্ডিনালটিটি সংগ্রহের প্রধান উদ্বেগ হয় তবে আপনার সম্ভবত কোনও বস্তুর পরিবর্তে একটি অ্যারে ব্যবহার করা উচিত।
স্টিমার 25

2
অন্য কেউ যদি অর্ডারটি নিয়ে উদ্বিগ্ন থাকেন তবে বেশিরভাগ ব্রাউজারগুলি পূর্বাভাসের সাথে আচরণ করে: stackoverflow.com/questions/280713/…
ফ্ল্যাশ

6
var প্রপ; for (অবজেক্টে প্রোপ) ব্রেক; // অবজেক্ট [প্রোপ]
নিউটিউল

12
পুরানো উত্তর কিন্তু। সম্পত্তিটি বস্তুর মালিকানাধীন কিনা তা আপনি পরীক্ষা করতে চাইতে পারেন। যেমন: (..) for যদি (! obj.hasOwnProperty (prop)) চালিয়ে যান; .... বিরতি; } কেবলমাত্র যদি বস্তুটি খালি থাকে তবে এটি প্রোটোটাইপ বা কোনও কিছুকে অনুসরণ করে না।
pgarciacamou

65

আপনি করতে পারেন Object.values(example)[0]


এই সব ব্রাউজারে পাওয়া যায়, উল্লেখ করছে stackoverflow.com/a/38748490/719689
AlxVallejo

1
আমি এর চেয়ে ভাল এটি পছন্দ করি Object.keys, কারণ আপনার প্রথম আইটেমটি পাওয়ার নিশ্চয়তা রয়েছে।
দ্য উথারসাইড


46

Object.keysকোনও বস্তুর উপর বৈশিষ্ট্যের অ্যারে পেতে ব্যবহার করুন । উদাহরণ:

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

var keys = Object.keys(example); // => ["foo1", "foo2", "foo3"] (Note: the order here is not reliable)

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

সম্পাদনা করুন : স্পষ্টতার জন্য, আমি কেবলমাত্র অন্য উত্তরে যা সঠিকভাবে বলেছিল তা প্রতিধ্বনিত করতে চাই: জাভাস্ক্রিপ্ট অবজেক্টগুলিতে মূল ক্রমটি সংজ্ঞায়িত।


25

একটি নিয়মের সংস্করণ:

var val = example[function() { for (var k in example) return k }()];

2
কখনও কখনও এটি ব্যবহার করতে ঝুঁকিপূর্ণ হতে পারে for inবেরাদরদের না দেখে hasOwnPropertyযাতে আপনি এই স্নিপেট থেকে অনাকাঙ্ক্ষিত ফলাফলের পেয়ে শেষ পর্যন্ত পারে অবজেক্ট হিসেবে প্রোগ্রামেটিক্যালি এটি যোগ করা অন্যান্য অবাঞ্ছিত মান ধারণ করে। এটির সংক্ষিপ্ত এবং ঝরঝরে অর্থ এর নিরাপদ সর্বোত্তম নয় Just
জাভিয়ের কোবোস

24

কোনও "প্রথম" সম্পত্তি নেই। অবজেক্ট কীগুলি অর্ডারড করা হয়নি।

তাহলে আপনার সাথে জন্য তাদের উপর লুপ (var foo in bar)তাদের যে পাবেন কিছু আদেশ, কিন্তু এটা ভবিষ্যতে পরিবর্তন হতে পারে (বিশেষত আপনি যোগ বা অন্যান্য কী অপসারণ থাকেন)।


অসাধারণ. সন্নিবেশ ক্রম বজায় রাখে এমন মানচিত্র প্রয়োগ করতে আমি একটি অবজেক্ট ব্যবহার করছি। আমি একবারে কোনও মান সরিয়ে ফেললে তা ব্রেক হয়ে যায় কারণ পরবর্তী সন্নিবেশ ফাঁকায় পূর্ণ হয়। :(
ডেভিড হার্কনেস

2
কী / মান অর্ডার জেএস এর নতুন সংস্করণগুলিতে সংরক্ষণ করা উচিত
আলেকজান্ডার মিলস

11

লোডাশ লাইব্রেরি সহ সমাধান :

_.find(example) // => {name: "foo1"}

তবে অভ্যন্তরীণ স্টোরেজ অর্ডারের বৈশিষ্ট্যের কোনও গ্যারান্টি নেই কারণ এটি জাভাস্ক্রিপ্ট ভিএম বাস্তবায়নের উপর নির্ভর করে।


2
এটি কেবল পরীক্ষা করা হয়েছে, এবং এটি কার্যকর হয় না। এটি কেবল মানটি প্রদান করে, কী / মান জোড়াকে নয়।
ক্রিস হেইনেস

2
প্রশ্নটিতে কোনও উল্লেখ নেই যে এটি কী / মান জুটি ফিরিয়ে আনবে, তিনি কেবল বস্তুর জন্য জিজ্ঞাসা করেন এবং গৃহীত উত্তরটি এই লোডাশ ফাংশনটির মতোই করে: এটি প্রথম সম্পত্তিটির বিষয়বস্তু ফিরিয়ে দেয়। এটি আপনার নির্দিষ্ট প্রয়োজনের সাথে খাপ খায় না, তবে উত্তরটি মূল প্রশ্নের ভিত্তিতে সঠিক।
কার্ম্ম

হ্যাঁ কাজটি কার্যকর, যখন আপনি জানেন যে আপনার অবজেক্টটিতে কেবলমাত্র একটি শিশু অবজেক্ট থাকবেvar object = { childIndex: { .. } }; var childObject = _.find(Object);
রাজা খুরী

9

এমডিসি দ্বারা সংজ্ঞায়িত কোনও বস্তু আক্ষরিক :

কোঁকড়া ধনুর্বন্ধনী ({}) দ্বারা আবদ্ধ সম্পত্তি এবং শূন্য বা আরও বেশি জোড় সংখ্যার একটি সামগ্রীর তালিকা object

সুতরাং কোনও বস্তুর আক্ষরিক কোনও অ্যারে নয় এবং আপনি কেবলমাত্র তাদের স্পষ্টত নাম বা কীওয়ার্ডটি forব্যবহার করে একটি লুপ ব্যবহার করে বৈশিষ্ট্যগুলিতে অ্যাক্সেস করতে পারেন in


25
অন্যদের জন্য এই উত্তরের জন্য কেবল সবুজ রঙের টিকটি দেখছেন, পৃষ্ঠাতে আরও 350 টি আপলোডের সাথে আরও একটি সমাধান রয়েছে।
redfox05

7

শীর্ষের উত্তর পুরো অ্যারে তৈরি করতে পারে এবং তারপরে তালিকা থেকে ক্যাপচার করতে পারে। এখানে একটি কার্যকর কার্যকর শর্টকাট

var obj = { first: 'someVal' };
Object.entries(obj)[0][1] // someVal

3

এটি এখানে আগে আচ্ছাদিত করা হয়েছে।

প্রথম ধারণাটি বস্তুগত বৈশিষ্ট্যের ক্ষেত্রে প্রযোজ্য নয়, এবং লুপের জন্য ... এর ক্রমটি স্পেস দ্বারা গ্যারান্টিযুক্ত নয়, তবে বাস্তবে এটি ক্রোমের ( বাগ রিপোর্ট ) জন্য সমালোচনামূলকভাবে ছাড়া বিশ্বস্তভাবে ফিফো is সেই অনুযায়ী আপনার সিদ্ধান্ত নিন।


3

পুরানো আই সংস্করণে এটি সমর্থিত না হওয়ায় আমি আপনাকে অবজেক্ট.কিজ ব্যবহার করার পরামর্শ দিচ্ছি না। তবে যদি আপনার সত্যিই এটির প্রয়োজন হয় তবে আপনি পিছনের সামঞ্জস্যের গ্যারান্টি দিতে উপরের কোডটি ব্যবহার করতে পারেন:

if (!Object.keys) {
Object.keys = (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
    hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
    dontEnums = [
      'toString',
      'toLocaleString',
      'valueOf',
      'hasOwnProperty',
      'isPrototypeOf',
      'propertyIsEnumerable',
      'constructor'
    ],
    dontEnumsLength = dontEnums.length;

return function (obj) {
  if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');

  var result = [];

  for (var prop in obj) {
    if (hasOwnProperty.call(obj, prop)) result.push(prop);
  }

  if (hasDontEnumBug) {
    for (var i=0; i < dontEnumsLength; i++) {
      if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
    }
  }
  return result;
}})()};

ফায়ারফক্স (গেকো) 4 (2.0) ক্রোম 5 ইন্টারনেট এক্সপ্লোরার 9 অপেরা 12 সাফারি 5

অধিক তথ্য: https://developer.mozilla.org/en-US/docs/ রেফারেন্স গ্লোবাল_অবজেক্টস অবজেক্ট কুকি

তবে আপনার যদি কেবলমাত্র প্রথমটির প্রয়োজন হয়, আমরা একটি সংক্ষিপ্ত সমাধানের ব্যবস্থা করতে পারি যেমন:

var data = {"key1":"123","key2":"456"};
var first = {};
for(key in data){
    if(data.hasOwnProperty(key)){
        first.key = key;
        first.content =  data[key];
        break;
    }
}
console.log(first); // {key:"key",content:"123"}

2

অবজেক্টে প্রথম কী নামটি পেতে আপনি ব্যবহার করতে পারেন:

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

একটি স্ট্রিং ফেরত দেয়, তাই আপনি যদি নেস্টেড অবজেক্টগুলি অ্যাক্সেস করতে পারবেন না, যেমন:

var obj = { first: { someVal : { id : 1} }; এখানে সেই সমাধান দিয়ে আপনি আইডি অ্যাক্সেস করতে পারবেন না।

আপনি যদি আসল অবজেক্টটি পেতে চান তবে সর্বোত্তম সমাধানটি লড্যাশ যেমন ব্যবহার করছে:

obj[_.first(_.keys(obj))].id

প্রথম কীটির মানটি ফিরিয়ে দিতে, (যদি আপনি ঠিক প্রথম কীটির নামটি না জানেন):

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

আপনি যদি মূল নামটি জানেন তবে সেক্ষেত্রে ব্যবহার করুন:

obj.first

অথবা

obj['first']

0

আপনার যদি "কোনও জিনিসের প্রথম সম্পত্তি" অ্যাক্সেসের প্রয়োজন হয় তবে এর অর্থ হতে পারে যে আপনার যুক্তিতে কিছু ভুল আছে। কোনও বস্তুর বৈশিষ্ট্যের ক্রমের বিষয়টি বিবেচনা করা উচিত নয়।


তুমি ঠিক বলছো. আমার প্রথম সেটির দরকার নেই, তবে কেবল একটি foo বৈশিষ্ট্য যাতে আমি এটির সাথে কাজ করতে পারি। আমার কেবল একটি দরকার এবং নিশ্চিত ছিলাম না যে ... "ইন" ব্যবহার না করে কেবল "প্রথম "টিকে ধরার উপায় ছিল কিনা
অ্যাটগল

0

কোনও বস্তুর পরিবর্তে একটি অ্যারে ব্যবহার করুন (বর্গাকার বন্ধনী)।

var example = [ {/* stuff1 */}, { /* stuff2 */}, { /* stuff3 */}];
var fist = example[0];

মনে রাখবেন যে আপনি 'ফু' শনাক্তকারীদের হারিয়েছেন। তবে আপনি এতে থাকা সামগ্রীতে একটি নামের সম্পত্তি যুক্ত করতে পারেন:

var example = [ 
  {name: 'foo1', /* stuff1 */},
  {name: 'foo2', /* stuff2 */},
  {name: 'foo3', /* stuff3 */}
];
var whatWasFirst = example[0].name;

এমন পরিস্থিতি রয়েছে যেখানে আমরা পারি না। আমরা ধরে
নিচ্ছি

1
আমি মনে করি এটি পাঠকদের জন্য যারা তাদের জেএসওএন স্কিমা নিয়ন্ত্রণ করতে পারেন তাদের জন্য ডিজাইনটি কিছুটা পিছনে ফেলে রাখা দরকারী। মূলত, আমি ফ্ল্যাভিয়াস স্টেফের উত্তরটি কয়েকটি উদাহরণ দিয়ে প্রসারিত করছি।
steamer25


0

আপনি ব্যবহার করতে পারেন Object.prototype.keysযা একই ক্রমে কোনও বস্তুর সমস্ত কী প্রদান করে। সুতরাং আপনি যদি প্রথম অবজেক্টটি চান তবে কেবল সেই অ্যারেটি পান এবং প্রথম উপাদানটি পছন্দসই কী হিসাবে ব্যবহার করুন।

const o = { "key1": "value1", "key2": "value2"};
const idx = 0; // add the index for which you want value
var key = Object.keys(o)[idx];
value = o[key]
console.log(key,value); // key2 value2

1
কোনও পুরানো প্রশ্নের উত্তর দেওয়ার সময়, অন্য উত্তর স্ট্যাকওভারফ্লো ব্যবহারকারীদের কাছে আপনার উত্তরটি আরও কার্যকর হবে যদি আপনি নিজের উত্তর কীভাবে সহায়তা করে তা ব্যাখ্যা করার জন্য কিছু প্রসঙ্গ অন্তর্ভুক্ত করে, বিশেষত ইতিমধ্যে স্বীকৃত উত্তর রয়েছে এমন একটি প্রশ্নের জন্য। দেখুন: আমি কীভাবে ভাল উত্তর লিখব
ডেভিড বাক

0

আমরা এই পদ্ধতির সাথেও করতে পারি।

var example = {
  foo1: { /* stuff1 */},
  foo2: { /* stuff2 */},
  foo3: { /* stuff3 */}
}; 
Object.entries(example)[0][1];

0

প্রথম কীটি পাওয়ার একটি পরিষ্কার উপায় এখানে রয়েছে:

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

var object2 = {
    needThis: 'This is a value of the property',
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

let [first] = Object.keys(example)
let [firstProp] = Object.keys(object2)

console.log(first)
//Prop : needThis, Value: This is a value of the property
console.log(`Prop : ${firstProp}, Value: ${object2[firstProp]}`)


তবে কেন চারদিকে অ্যারে [first]। ব্যবহারকারী উত্তর হিসাবে কোনও অ্যারের অনুরোধ করেনি। first = Object.keys(example)[0]অ্যারেতে উত্তর মোড়ানোর প্রয়োজন ছাড়াই এটি কেন করবে over আপনার ক্লিনার দয়া করে কেন?
মাইকেল ডুরান্ট

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