একটি জাভাস্ক্রিপ্ট অবজেক্টে শেষ আইটেম পেয়ে


96

যদি আমার মতো একটি বিষয় থাকে:

{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }

যদি আমি আগেই জানতে না পারি যে তালিকাটি 'গ' এর উপরে চলে যায়, বস্তুর মাধ্যমে লুপিং ব্যতীত, অবজেক্টে শেষ আইটেমটি পাওয়ার কোনও উপায় আছে (যেমন 'carrot')?


এটা একটা ভালো প্রশ্ন. এছাড়াও, কীভাবে অবজেক্টগুলিকে শূন্যতার জন্য চেক করা যায়, সেগুলির উপরে লুপিং ছাড়া?
লুকাশ এডার

4
সম্পত্তি "আইটেম" নয়। এবং না, সম্পত্তি অর্ডার অপরিজ্ঞাত।
নিখরচায়

সর্বশেষ সম্পত্তি মান তার অর্থ, আমি বলব
KooiInc

উত্তর:


67

নং অর্ডার জেএসওএন এবং সর্বাধিক অন্যান্য কী-মান ডেটা স্ট্রাকচারে গ্যারান্টিযুক্ত নয়, সুতরাং শেষ আইটেমটি কখনও কখনও কখনও কখনও হতে পারে carrotএবং অন্য সময়েও হতে পারে banana। আপনি যদি প্রয়োজন ক্রম উপর নির্ভর, আপনার সেরা বাজি অ্যারে সঙ্গে যেতে হয়। কী-মান ডেটা স্ট্রাকচারের শক্তি বস্তুর আইটেমটি keysপেতে সক্ষম না হয়ে তাদের দ্বারা মান অ্যাক্সেসের nthমধ্যে থাকে।


4
পুরোপুরি সঠিক উত্তরটির সম্প্রসারণ হিসাবে। অবজেক্টগুলি অ্যারে নয়, এমনকি যদি আপনি জেএসে অ্যারে চিহ্নিতকারী ব্যবহার করে কোনও এসোসিয়েটিভ অ্যারে তৈরি করেন []তবে এটি সত্যই একটি বস্তু। জেএসের মতো সাহসী অ্যারে নেই, অ্যারেগুলিকে অ্যাক্সেস এবং ক্রম সূচিবদ্ধ করা হয়েছে; অবজেক্টগুলির অ্যাসোসিয়েটিভ সম্পত্তি অ্যাক্সেস রয়েছে, অ-অনুক্রমিক।
অর্বলিং

4
আমি জানি যে তাদের কাছে অর্ডার দেওয়ার গ্যারান্টি নেই, তবে ব্যবহারিক শর্তে যদি আমার অবজেক্টের তৈরির উপর নিয়ন্ত্রণ থাকে তবে আমি নিশ্চিত করতে পারি যে তারা একটি নির্দিষ্ট ক্রমে রয়েছে। স্পষ্টতই, প্রশ্নের উত্তর, যদিও, "না"। :)
স্প্রিংম্যান

4
@ স্প্রুমম্যান: ক্রোমে নেই। এই বিষয়টি নিয়ে দীর্ঘকাল ধরে উত্তপ্ত তর্ক বিতর্ক চলছে
টিম ডাউন

225

হ্যাঁ, ব্যবহার করার একটি উপায় আছে Object.keys(obj)। এটি এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে :

var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]

আপনি যদি শেষ অবজেক্টের মান পেতে চান তবে আপনি এটি করতে পারেন:

fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"

8
এটি এক স্বীকৃত হওয়া উচিত, এটি Object.keysদুর্দান্ত কাজ করে। এটি IE8 এবং 7 এ কাজ করার জন্য একটি উপায় খুঁজে বের করতে হবে, কারণ এটি কেবলমাত্র আইই 9 তে প্রদর্শিত হয়েছিল।
রাফেলডিডিএল

4
আপনি অবজেক্ট.ভ্যালু (ফলেরঅবজেক্ট) দিয়ে সরাসরি করতে পারেন যা কীগুলির পরিবর্তে মানগুলি ফিরিয়ে দেবে এবং তারপরে শেষ উপাদানটি ফিরে পেতে আপনার অ্যারে একটি পপ () করবে।
ইয়ভন হুইন

4
এখানে প্রথম উত্তরটি সঠিক উত্তর। আমি Object.keysসম্পত্তি এবং প্রকৃতপক্ষে এলোমেলোভাবে অর্ডার করা হয়েছে তা খুঁজে বার করতে চেষ্টা করলাম । আপনার ব্রাউজার কনসোলে লগ-ইন করার সময় প্রকৃত সম্পত্তি অর্ডার প্রদর্শিত হয় তার থেকে আলাদা। ব্রাউজার কনসোলে লগইন করার পরে, বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে পুনরায় সাজানো হয় এবং বর্ণানুক্রমিকভাবে / সংখ্যায় প্রদর্শিত হয়, যা অবশ্যই কিছু বিভ্রান্তির কারণ হয়ে থাকে।
কেনসোর

4
জেএস স্পেস কীটির ক্রমটির গ্যারান্টি দেয় না এবং এটি বিভিন্ন বাস্তবায়ন (ইঞ্জিন) এর মধ্যে পৃথক হতে পারে। সুতরাং এলোমেলোভাবে উত্পাদিত (কীড) অবজেক্টের জন্য সন্নিবেশ ক্রমের গ্যারান্টি দেওয়া সম্ভব নয়। অ্যারে হ'ল এক ধরণের অবজেক্ট যেখানে কীটি অন্যান্য দরকারী বৈশিষ্ট্যগুলির মধ্যে সন্নিবেশের ক্রমকে গ্যারান্টি হিসাবে সংখ্যার সূচক।
ইথান দোহ

4
গুড লর্ড মানুষ ওয়েব ডেভেলপমেন্ট 2010-2013 ফিরে করছেন একটি কঠিন সময় ছিল ...
Merc

22
last = Object.keys(obj)[Object.keys(obj).length-1];

যেখানে আপত্তি আপনার বিষয়


4
এটি সর্বশেষ কীটি ( 'c'এই ক্ষেত্রে) পায় তবে প্রশ্নটি এমনভাবে শব্দযুক্ত যা বোঝায় যে প্রশ্নকারী সর্বশেষ মানটি ( 'carrot') খুঁজছেন। এটি ইতিমধ্যে এমন কিছু যুক্ত করে না যা ইতিমধ্যে ক্রিস্টিনা স্টেফানোভার জবাব
বমাপিন


10

ES6 এর ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট সিনট্যাক্স ব্যবহার করে সমাধান:

var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"


6

আপনি এটি চেষ্টা করতে পারেন। এটি শেষ আইটেম সংরক্ষণ করবে। এখানে আপত্তি অ্যারে রূপান্তর করা প্রয়োজন। তারপরে অ্যারে pop()ফাংশনটি ব্যবহার করুন যা রূপান্তরিত অ্যারে থেকে শেষ আইটেমটি ফিরে আসবে।

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);


5

জাভাস্ক্রিপ্টে অবজেক্ট বৈশিষ্ট্যের ক্রম হিসাবে, আমি কেবল এই উত্তরের সাথে লিঙ্ক করব:

উপাদানগুলি একটি "জন্য (… ইন…)" লুপে অর্ডার করে

বিশেষত:

ইসমাস্ক্রিপ্টের সমস্ত আধুনিক বাস্তবায়নগুলি তাদের সংজ্ঞা অনুসারে ক্রম অনুযায়ী বস্তুর বৈশিষ্ট্যগুলির মাধ্যমে পুনরাবৃত্তি করে

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

তদ্ব্যতীত, অবজেক্ট বৈশিষ্ট্যের ডি-ফ্যাক্টো গণনা ক্রম ভবিষ্যতের EMCAScript স্পেসে কোডযুক্ত হওয়ার সম্ভাবনা রয়েছে।

তবুও, এই সময়ে আমি এগুলির চারপাশে কোডটি লিখব না, বেশিরভাগ কারণেই বস্তুর সম্পত্তি অর্ডার নিয়ে কাজ করার জন্য কোনও বিল্ট-ইন সরঞ্জাম নেই tools আপনি নিজের লেখা লিখতে পারেন, তবে শেষ পর্যন্ত আপনি সর্বদা তার সামগ্রীর অবস্থান নির্ধারণের জন্য কোনও সামগ্রীর উপরে লুপ করে যাবেন।

যেমন আপনার প্রশ্নের উত্তর হ'ল না , কোনও বস্তুর মধ্য দিয়ে লুপিং ছাড়া উপায় নেই।


যেমনটি আপনি বলেছেন, আমি অবশ্যই সম্পত্তি সম্পত্তি গণনার জন্য কোনও আদেশের উপর নির্ভর করব না। শুরু করার জন্য, নতুন ইসসিএমএসক্রিপ্ট বাস্তবায়নগুলি এই ডি-ফ্যাক্টো স্ট্যান্ডার্ডটি অনুসরণ করার কোনও বাধ্যবাধকতার অধীন নয়, সুতরাং নির্দিষ্ট আদেশে নির্ভর কোডটি ভবিষ্যতের প্রমাণ নয়; এছাড়াও, সমস্ত বর্তমান ব্রাউজার একই আচরণ করে না। এই আলোচনাটি ক্রোম বাগ ট্র্যাকারে দেখুন: কোড . google.com/p/v8/issues/detail?id=164 । অবশেষে, আমি আশা করি না যে ইসমাস্ক্রিপ্ট বিশেষটি শীঘ্রই এটিকে যেকোন সময় মানীকৃত করবে।
টিম ডাউন

5

আদেশের বিষয়টি বিবেচনায় থাকলে কোনও অ্যারে ব্যবহার করুন, কোনও বস্তু আক্ষরিক নয়।

list = ['apple', 'banana', 'carrot'];

বা কিছু

dict = {
 'a' : ['apple', 'awesome'],
 'b' : ['best friend']
};

অথবা এমনকি..

dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];

এর জন্য কীগুলি যাতে dictকোনওভাবেই হয় সেটির গ্যারান্টি নেই।


5

অন্যান্য উত্তরগুলি আমার জন্য এটি পরিচ্ছন্ন।

let animals = {
  a: 'dog',
  b: 'cat',
  c: 'bird'
}

let lastKey = Object.keys(animals).pop()
let lastValue = animals[Object.keys(animals).pop()]

3
JSArray = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };  
document.write(Object.keys(JSArray)[Object.keys(JSArray).length-1]);// writes 'c'   
document.write(JSArray[Object.keys(JSArray)[Object.keys(JSArray).length-1]]); // writes 'carrot'

1

আপনি এই Object.values()পদ্ধতিটি ব্যবহার করতে পারেন :

Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"

0

জাভাস্ক্রিপ্টে মানচিত্র অবজেক্ট । এটি ইতিমধ্যে এখন প্রায় 3 বছর পুরানো। এই মানচিত্রের ডেটা স্ট্রাকচারটি ক্রমটি ধরে রেখেছে যাতে আইটেমগুলি .োকানো হয়। এই শেষ আইটেমটি পুনরুদ্ধার করার ফলে মানচিত্রে সর্বশেষতম আইটেম .োকানো হবে



0

বর্ণমালা অনুসারে আপনি যদি শেষ কীটি বোঝাতে চান তবে আপনি (গ্যারান্টিযুক্ত) করতে পারেন:

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var keys = Object.keys(obj);
keys.sort();
var lastkey = keys.pop() // c
var lastvalue = obj[lastkey] // 'carrot'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.