সহযোগী অ্যারে কীগুলির একটি তালিকা পাচ্ছেন


258

জাভাস্ক্রিপ্টে আমার একটি সহযোগী অ্যারে রয়েছে:

var dictionary = {
    "cats": [1,2,3,4,5], 
    "dogs": [6,7,8,9,10]
};

এই অভিধানের কীগুলি কীভাবে পাব? অর্থাৎ আমি চাই

var keys = ["cats", "dogs"];

7 বছর পরে সম্পাদনা করুন: কেবল পরিভাষাটি সঠিক হওয়ার জন্য - জাভাস্ক্রিপ্টে 'এসোসিয়েটিভ অ্যারে' বলে কোনও জিনিস নেই - এটি প্রযুক্তিগতভাবে কেবল একটি objectএবং এটি আমরা চাইলে অবজেক্ট কীগুলি রয়েছে।


লোডাস জেএসের সাথে সহজ উপায় - lodash.com/docs#keys
রাসায়নিক প্রোগ্রামার

পরিভাষাটি পরিষ্কার করার জন্য ধন্যবাদ! আপনি কি উজ্জ্বল লাল ঝলকানো আলোতে কিছুটা বড় করতে পারেন?
জো ফিলিপস

@ জো আমি যখন এটি সুযোগ পাব তখন এটি আপনার জন্য গুগলে প্রথম ফলাফল করব
সাইমন_উইভার

উত্তর:


84

তুমি ব্যবহার করতে পার: Object.keys(obj)

উদাহরণ:

var dictionary = {
  "cats": [1, 2, 37, 38, 40, 32, 33, 35, 39, 36],
  "dogs": [4, 5, 6, 3, 2]
};

// Get the keys
var keys = Object.keys(dictionary);

console.log(keys);

ব্রাউজার সমর্থনের জন্য নীচে রেফারেন্স দেখুন। এটি ফায়ারফক্স 4.20, ক্রোম 5, আই 9 এ সমর্থিত। নীচের লিঙ্কটিতে একটি কোড স্নিপেট রয়েছে যা Object.keys()আপনার ব্রাউজারে সমর্থিত না হলে আপনি যুক্ত করতে পারেন ।

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys


আমি এখন এটি গৃহীত উত্তরে স্যুইচ করছি। কেবল আইই 8 এটি আর সমর্থন করে না (যার জন্য একটি পলিফিল উপলব্ধ বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

382

এটা চেষ্টা কর:

var keys = [];
for (var key in dictionary) {
  if (dictionary.hasOwnProperty(key)) {
    keys.push(key);
  }
}

hasOwnPropertyপ্রোটোটাইপ অবজেক্টে কী সন্নিবেশ করা সম্ভব হওয়ায় এটি প্রয়োজন dictionary। তবে আপনি সাধারণত আপনার তালিকায় এই কীগুলি অন্তর্ভুক্ত করতে চান না।

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

Object.prototype.c = 3;
var dictionary = {a: 1, b: 2};

এবং তারপর একটি কি for...inবেশি লুপ dictionary, আপনি পাবেন aএবং b, কিন্তু আপনি পাবেন c


"Var key = []" ঘোষণার দরকার নেই, যদি না আপনি লুপের পরে এটি ব্যবহার না করেন।
মিজালাজার

2
@ এমজালাজার, আপনি আরও ভাল করতে পারেন বা এটি একটি বিশ্বব্যাপী পরিবর্তনশীল হবে, যা খারাপ অভ্যাস।
b00t

@ বি00 টি আমি যদিও লুপের জন্য একটি ভেরিয়েবল ঘোষণা করে ... এটি বৈশ্বিক স্থানের মধ্যে স্থাপন করা হবে না ... এখন আপনি আমাকে সন্দেহ করেছেন তিনি :)
মিজলাজার

2
@ এমজালাজার, আপনি যদি কেবলমাত্র ব্যবহার করছেন তবে আপনি কোনও মুহুর্তে এটি ( কীগুলি ) ঘোষণা করছেন না keys.push(key);। আপনি বিশ্বব্যাপী নেমস্পেস থেকে কেবল টানছেন (এবং এভাবে এটি ঘোষণা করছেন)। :)
b00t

183
for (var key in dictionary) {
  // do something with key
}

এটা for..in বিবৃতি


1
কেবল লক্ষ্য করেছেন যে "কুকুর" এবং উপরের অ্যারের মধ্যে কমা পরিবর্তে কোলন থাকা উচিত। ধরুন এটি প্রতিলিপিটির কারণে।
wombleton

68
dictionary.hasOwnProperty(key)অন্যথায় আপনি প্রোটোটাইপ চেইন থেকে পদ্ধতিগুলি শেষ করতে পারেন তা পরীক্ষা করা খুব গুরুত্বপূর্ণ ..
টাইগ্রেন

4
একই নিবন্ধ থেকে: একটি বস্তুর অসংখ্য গুণাবলীর স্বেচ্ছাসেবী অনুসারে আইট্রেট করে । যদি কী অর্ডারটি গুরুত্বপূর্ণ, আপনার মূল অ্যারেটিকে সাজানো অ্যারে থেকে চাবি পেতে একটি অ্যারেতে চাপ দেওয়া, বাছাই করা এবং তারপরে একটি () লুপ ব্যবহার করার মতো কিছু করা দরকার।
এমসিএমএলএক্সএক্সএক্সভিভি

1
অবশ্যই, অভিধানটি বাদ দিয়ে উপযুক্তকরণ করা ভাল hasআস ওনপ্রোপার্টি চেক করে আপনি যদি আত্মবিশ্বাসের সাথে বিশ্বাস রাখতে পারেন যে এই জিনিসের কোনও প্রোটোটাইপের অভাব রয়েছে। তবে এই প্রসঙ্গে প্রোটোটাইপ উত্তরাধিকারের সম্ভাবনা সম্পর্কে সচেতন হওয়া গুরুত্বপূর্ণ, যেহেতু জাভাস্ক্রিপ্ট অভিধানগুলি আসলে বস্তু।
ফিক্সার্কমার্ক

16

কেবলমাত্র একটি দ্রষ্টব্য নোট, যদি আপনি একটি লাইব্রেরি (jQuery, প্রোটোটাইপ, ইত্যাদি) ব্যবহার করেন তবে for..in ব্যবহারের বিষয়ে সতর্ক থাকুন, কারণ তাদের বেশিরভাগ তৈরি করা অবজেক্টগুলিতে (অভিধান সহ) পদ্ধতি যুক্ত করে।

এর অর্থ হ'ল আপনি যখন এগুলি লুপ করবেন তখন পদ্ধতির নামগুলি কী হিসাবে উপস্থিত হবে। আপনি যদি কোনও গ্রন্থাগার ব্যবহার করে থাকেন তবে ডকুমেন্টেশনটি দেখুন এবং একটি অগণিত বিভাগ সন্ধান করুন, যেখানে আপনি আপনার বস্তুর পুনরাবৃত্তির জন্য সঠিক পদ্ধতিগুলি খুঁজে পাবেন।


3

সহজ জ্যাকুয়েরি উপায়।

এটি আমি
জাভাস্ক্রিপ্ট ডিকশনারি অবজেক্ট হিসাবে যেতে চাইছি অভিধান ওবজ ব্যবহার করি । মান, অভিধানে তাদের নাম থাকার মূলসূত্র কী।

 $.each(DictionaryObj, function (key, value) {
            $("#storeDuplicationList")
                .append($("<li></li>")
                .attr("value", key)
                .text(value));
        });

1
এর জন্য jQuery দরকার (যা ভাল) তবে আপনি এটি উল্লেখ করতে ভুলে গেছেন :-)
সাইমন_উইভার

@ এক্সজিলে আপনার ফাংশন সংজ্ঞায় যুক্তির নামগুলি খুব বিভ্রান্তিকর। এটি api.jquery.com/jquery.eachবলেছে যে কলব্যাকটি ফাংশন (স্ট্রিং প্রপার্টি নাম, অবজেক্ট ভ্যালুঅফপ্রপার্টি) is আপনার নামগুলি বিপরীত বোঝায়।
ক্রিস

@ ক্রিস আমি আপনার জন্য এটি আপডেট করব। যে ইশারা জন্য ধন্যবাদ।
এক্সেজাইল

0

আমি বর্তমানে রব দে লা ক্রুজ এর উত্তর ব্যবহার করছি

Object.keys(obj)

এবং প্রথম দিকে লোড হওয়া একটি ফাইলটিতে আমার কাছে ইন্টারনেটে অন্য কোথাও থেকে ধার করা কোডের কয়েকটি লাইন রয়েছে যা স্ক্রিপ্ট ইন্টারপ্রেটারগুলির পুরানো সংস্করণগুলির ক্ষেত্রে আবরণ করে যা অবজেক্ট.কিগুলি অন্তর্নির্মিত নেই।

if (!Object.keys) {
    Object.keys = function(object) {
        var keys = [];
        for (var o in object) {
            if (object.hasOwnProperty(o)) {
                keys.push(o);
            }
        }
        return keys;
    };
}

আমি মনে করি এটি বৃহত প্রকল্পগুলির জন্য উভয় বিশ্বের সেরা: সাধারণ আধুনিক কোড এবং ব্রাউজারগুলির পুরানো সংস্করণগুলির জন্য পিছনে সামঞ্জস্যপূর্ণ সমর্থন ইত্যাদি etc.

কার্যকরভাবে এটি ডাব্লু লা ক্রুজ এর অবজেক্ট.কিজ (ওজেক্ট) স্থানীয়ভাবে উপলব্ধ না হলে জেডাব্লু এর সমাধানটিকে ফাংশনটিতে ফেলে দেয়।

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