অবজেক্টের কীগুলির অ্যারে পান


371

আমি জাভাস্ক্রিপ্ট অবজেক্টের কীগুলি জাভেরি বা খাঁটি জাভাস্ক্রিপ্টে অ্যারে হিসাবে পেতে চাই।

এর চেয়ে কম ভার্বোস উপায় আছে কি?

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}

4
যোগ করা ছাড়াও if(foo.hasOwnProperty(key)), আমি এটিই করতাম। বা, ব্যবহার $.map
রকেট হাজমত

10
পাইথোনিক ওয়ান-লাইনারের জন্য ওহ, যদিও ...
রিচার্ড

একটি পুরানো প্রশ্ন তাই একটি সম্পূর্ণ উত্তর মূল্য, কিন্তু যাঁরা বেহালার করতে চান তাদের জন্য না ... jsfiddle.net/LR5D9/3 প্রোটোটাইপ ঘোষণা ইস্যু সঙ্গে এই সমাধান পুলিশ আপ তালগোল পাকানো for var in xলুপ
unsynchronized

উত্তর:


618

ব্যবহার Object.keys:

var foo = {
  'alpha': 'puffin',
  'beta': 'beagle'
};

var keys = Object.keys(foo);
console.log(keys) // ['alpha', 'beta'] 
// (or maybe some other order, keys are unordered).

এটি একটি ইএস 5 বৈশিষ্ট্য। এর অর্থ এটি সমস্ত আধুনিক ব্রাউজারে কাজ করে তবে লিগ্যাসি ব্রাউজারগুলিতে কাজ করবে না

ES5-shim এর একটি বাস্তবায়ন রয়েছে যা Object.keysআপনি চুরি করতে পারেন


5
দ্রষ্টব্য: এটি কেবলমাত্র আধুনিক ব্রাউজারগুলিতে কাজ করে (তার অর্থ আমি নয় <<< নয়)।
রকেট হাজমত

2
আর মোবাইল ব্রাউজারগুলির কী হবে?
মারওয়েন ট্রাবেলসি

1
@ স্মার্টটিউটি: আমি নিশ্চিত নই। আমি ধরে নিলাম এটি ক্রোম বা ফায়ারফক্সের মতো করে।
রকেট হাজমাত

এমডিএন-র উপরে উল্লিখিত পলিফিল রয়েছে, তবে আই
04

ES5 এর আগে কেউ কীভাবে এটি করল?
অ্যান্ড্রু এস

59

আপনি jQuery এর ব্যবহার করতে পারেন $.map

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' },
keys = $.map(foo, function(v, i){
  return i;
});

অথবা each, যদি আপনি তাদের সাথে কিছু করছেন। $.each(foo, function(index, value){/* do something with index */});
ক্রিস ২

33

অবশ্যই, Object.keys()হয় সেরা উপায় হল একটি অবজেক্ট এর চাবি জন্য। যদি এটি আপনার পরিবেশে উপলভ্য না থাকে তবে আপনার উদাহরণ হিসাবে কোড ব্যবহার করে এটি তুচ্ছভাবে শিম দেওয়া যেতে পারে (আপনার Object.keys()আচরণের বিপরীতে আপনার লুপটি প্রোটোটাইপ শৃঙ্খলে সমস্ত বৈশিষ্ট্যের উপরে পুনরাবৃত্তি করবে ))

তবে, আপনার উদাহরণ কোড ...

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}

jsFizz

... পরিবর্তন করা যেতে পারে। আপনি ভেরিয়েবল অংশে অ্যাসাইনমেন্টটি করতে পারেন ।

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [], i = 0;
for (keys[i++] in foo) {}

jsFizz

অবশ্যই, এই আচরণটি Object.keys()আসলে যা করে ( জেএসফিডাল ) তার থেকে আলাদা । আপনি কেবল এমডিএন ডকুমেন্টেশনে শিমটি ব্যবহার করতে পারেন ।


8
আমি এটি পছন্দ করেছি var keys = [], i = 0; for (keys[i++] in foo) {}+1
যশবন্ত

আমি শুনেছি "ইন ইন" আদেশের গ্যারান্টি দেয় না, আপনি কি জানেন যে Object.keys এটি করে কিনা?
ক্রিস স্টিফেন্স

@ ক্রিসটেসফেনগুলি কোনও গ্যারান্টি অর্ডার করে না, এমনকি কীগুলি যদি অর্ডার করা অ্যারেতে থাকে তবে।
অ্যালেক্স

2
এই সমস্ত সমাধানের অবশ্যই একটি hasOwnProperty()চেক দরকার ?
unsynchronized

1
@ টিমিনিউট্রন এটি না করার কোনও কারণ নেই :)
অ্যালেক্স

7

আমি কম ভার্বোস সম্পর্কে জানি না তবে ওয়ান-লাইনারের অনুরোধের দ্বারা আমি নিম্নলিখিত লাইনের উপর চাপিয়ে দিতে অনুপ্রেরণা পেয়েছি, যদিও পাইথোনিকটি এটি কীভাবে তা জানেন না;)

var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo);

3
সম্ভবত এটি হওয়া উচিত var enumerableKeysOnThePrototypeChain;)
অ্যালেক্স

1
হতে পারে আমরা যথেষ্ট স্মার্ট এটি জানার জন্য আমাদের
হ'ল প্রপার্টি

@ অ্যালেক্সের ২ য় উত্তরের মতো পাইথোনিক নয় ( for (keys[i++] in foo) {}যদিও) আপনি এখনও পারফর্ম করছেন Array.push()(পুরো ফাংশন ঘোষণার কথা উল্লেখ না করে)। একটি পাইথোনিক বাস্তবায়ন যতটা সম্ভব অন্তর্নিহিত বোধগম্যতার উপর নির্ভর করে এবং লাম্বদা এক্সপ্রেশনটি ব্যবহার করে ব্যর্থ হয়।
গাওয়ারবার্ট

4

যদি আপনি এখানে কোনও এন-গভীরতার নেস্টেড অবজেক্টের কীগুলি ফ্ল্যাট অ্যারে হিসাবে তালিকাভুক্ত করার জন্য কিছু সন্ধান করছেন:

const getObjectKeys = (obj, prefix = '') => {
  return Object.entries(obj).reduce((collector, [key, val]) => {
    const newKeys = [ ...collector, prefix ? `${prefix}.${key}` : key ]
    if (Object.prototype.toString.call(val) === '[object Object]') {
      const newPrefix = prefix ? `${prefix}.${key}` : key
      const otherKeys = getObjectKeys(val, newPrefix)
      return [ ...newKeys, ...otherKeys ]
    }
    return newKeys
  }, [])
}

console.log(getObjectKeys({a: 1, b: 2, c: { d: 3, e: { f: 4 }}}))


1

সারসংক্ষেপ

কোনও অবজেক্টের সমস্ত কীগুলি আপনি ব্যবহার করতে পারেন Object.keys()Object.keys()একটি বস্তুকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং সমস্ত কীগুলির একটি অ্যারের প্রদান করে।

উদাহরণ:

const object = {
  a: 'string1',
  b: 42,
  c: 34
};

const keys = Object.keys(object)

console.log(keys);

console.log(keys.length) // we can easily access the total amount of properties the object has

উপরের উদাহরণে আমরা কী কনস্টে কীগুলির একটি অ্যারে সঞ্চয় করি। তারপরে আমরা কীগুলির অ্যারের দৈর্ঘ্য পরীক্ষা করে সহজেই বস্তুর উপরের বৈশিষ্ট্যের পরিমাণ অ্যাক্সেস করতে পারি।

এর সাথে মানগুলি পাওয়া: Object.values()

পরিপূরক ফাংশন Object.keys()হয় Object.values()। এই ফাংশনটি একটি বস্তুকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং মানগুলির অ্যারে প্রদান করে। উদাহরণ স্বরূপ:

const object = {
  a: 'random',
  b: 22,
  c: true
};


console.log(Object.values(object));


1

যদি আপনি অ্যান্ডস্কোর.জেএস ব্যবহার করার সিদ্ধান্ত নেন তবে আপনি আরও ভাল করতে পারেন

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
_.each( foo, function( val, key ) {
    keys.push(key);
});
console.log(keys);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.