জাভাস্ক্রিপ্ট অবজেক্ট কী তালিকা পাওয়া যাচ্ছে


295

আমার মতো একটি জাভাস্ক্রিপ্ট অবজেক্ট রয়েছে

var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}

আমি কীভাবে এই অবজেক্টে কীগুলির দৈর্ঘ্য এবং তালিকা পেতে পারি?



@ টিজে আমি মনে করি এটি সম্পূর্ণ এক নয়। এটি একটি বস্তু, সদৃশ একটি JSON অবজেক্ট।
গাইটি

যদি আপনার আন্ডারস্কোর থাকে তবে কেবল _ কুকি (আপনার_পজেক্ট)
মিনহাজুল

1
যেহেতু ২০১০ সালের পর থেকে পরিস্থিতি পরিবর্তিত হয়েছে, সর্বাধিক উত্সাহিত উত্তরটি "উত্তর" হিসাবে গ্রহণ করা ভাল হতে পারে
জোনাস উইলস

উত্তর:


341

var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
};
var keys = [];

for (var k in obj) keys.push(k);

alert("total " + keys.length + " keys: " + keys);


আমি মনে করি না জাভাস্ক্রিপ্ট পিএইচপি এর মতো, যেখানে আপনি প্রথম লাইনটি পুরোপুরি এড়িয়ে যেতে পারেন? এর মতো কিছু যেভাবেই করার পরামর্শ দেওয়া হয় না।
বার্ট ভ্যান হিউকেলোম

@ বার্ট: না, জাভাস্ক্রিপ্টে প্রথম লাইনটি প্রয়োজনীয়।
ড্যানিয়েল ভ্যাসালো

6
এখানে একটি প্রান্তের মামলার জন্য আপনার নীচে ডেভিড মরিসির মন্তব্যে একবার নজর দেওয়া উচিত। কখনও কখনও এই পদ্ধতির গ্রহণের ফলে অবাঞ্ছিত সদস্যরা প্রোটোটাইপটিতে প্রদর্শিত হবে keys

2
@ পাপ: আপনি যদি বস্তুর আক্ষরিক ব্যবহার করছেন তবে তা কেবল তখনই ঘটবে যদি আপনি প্রসারিত করেন Object.prototype, যা আপনাকে যাইহোক করা উচিত নয়। কাস্টম নির্মাণকারীদের জন্য, যদিও আপনি ঠিক বলেছেন।
সাশা চেদিগোভ

@ বার্টওয়ান হিউকেলোম জুন ২০১০ এও ফিরে এসেছিল যে কোনও নোটিশ দিয়েছে, কারণ এর অর্থ আপনি অবজেক্টটি টাইপ করছেন। বরাদ্দ করা []এটা (বা array()তখন) এটি একটি অ্যারের, যেটি আপনি পরে নিরাপদে একটি অ্যারে হিসাবে ব্যবহার করতে পারেন করে তোলে।
নীলস কেওরেন্টজেস

627

var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+  keys);

এটি এখন বেশিরভাগ প্রধান ব্রাউজারগুলিতে সমর্থিত


7
এটি ক্রোমে কাজ করে তা এইও বোঝায় যে এটি নোড.জেজে কাজ করে কারণ উভয়ই ভি 8 জাভাস্ক্রিপ্ট ইঞ্জিনে নির্মিত।
হোমমে জাওয়াগস্ট্রা

9
আজকাল @ ফিট, হ্যাঁ দু'বছর আগেও তেমন কিছু হয়নি।
AlbertEngelB

4
এই থেকে পৃথক নোট করুন for(key in ob)! Object.keysপ্রোটোটাইপগুলি থেকে কীগুলি তালিকাভুক্ত করবে .. in objনা , তবে করবে ।
অ্যালবার্ট

9
@ ফিট উইন্ডোজ 7 আইই 8 নিয়ে এসেছিল। এটি যতটা দুর্দান্ত হবে, লোকেরা IE8 ব্যবহার বন্ধ না করা পর্যন্ত এটি গ্রহণযোগ্য উত্তর হতে পারে না।
snuggles

1
এখানে ডেভেলপার.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েবে / জাভা স্ক্রিপ্ট / রেফারেন্স / আপনি এমন একটি জাভাস্ক্রিপ্ট পদ্ধতি খুঁজে পেয়েছেন যা পুরানো ব্রাউজারগুলিতে সঠিকভাবে কাজ করে এবং নতুন ব্রাউজারগুলিতে কার্যকারিতাটি ওভাররাইট করে না। নীচে আমার উত্তর দেখুন।
সান্দ্রো

27

অ্যান্ডস্কোর.জেএস রূপান্তরকে বেশ পরিষ্কার করে তোলে:

var keys = _.map(x, function(v, k) { return k; });

সম্পাদনা: আমি মিস করেছি যে আপনি এটিও করতে পারেন:

var keys = _.keys(x);

এটি সঠিক, আসল আন্ডারস্কোর উত্স: নেটিকিজেস = অবজেক্ট.কিস; hasOwnProperty = ObjProto.hasOwnProperty; .হাস = ফাংশন (اعتراض, কী) {রিটার্ন hasOwnProperty.call (اعتراض, কী); }; _.কিজ = নেটিজ কিস || ফাংশন (আপত্তি) {যদি (আপত্তি! == অবজেক্ট (আপত্তি)) নতুন টাইপ ইরার ('অবৈধ অবজেক্ট') ফেলে দেয়; var key = []; ( ওরে ইন কী অবজেক্ট ) যদি ( .হাস (ওজেক্ট, কী)) কী.পুশ (কী); রিটার্ন কী; };
মিগুয়েল আলেজান্দ্রো ফুয়েন্তেস লোপেজ

18

আপনি যদি কেবল সেই চাবিগুলি চান যা নির্দিষ্ট নির্দিষ্ট অবজেক্টের জন্য নির্দিষ্ট এবং কোনও উত্পন্ন prototypeবৈশিষ্ট্য নয়:

function getKeys(obj) {
    var r = []
    for (var k in obj) {
        if (!obj.hasOwnProperty(k)) 
            continue
        r.push(k)
    }
    return r
}

উদাহরণ:

var keys = getKeys({'eggs': null, 'spam': true})
var length = keys.length // access the `length` property as usual for arrays

4
var keys = new Array();
for(var key in obj)
{
   keys[keys.length] = key;
}

var keyLength = keys.length;

অবজেক্ট থেকে কোনও মান অ্যাক্সেস করতে আপনি আপত্তি [কী] ব্যবহার করতে পারেন;


আপনার অ্যারে সূচক
বিবেক

অ্যারে সূচকটি স্বয়ংক্রিয়ভাবে বৃদ্ধি পায় keys.lengthযা প্রতিটি পুনরাবৃত্তির জন্য পৃথক পৃথক হিসাবে প্রতিটি পুনরাবৃত্তি একটি মান সন্নিবেশ করে।
KrekkieD

4
obj = {'a':'c','b':'d'}

আপনি চেষ্টা করতে পারেন:

[index for (index in obj)] 

এটি ফিরে আসবে:

['a','b']

কী বা তালিকা পেতে

[obj[index] for (index in obj)]

মান পেতে


গুগল ক্রোম v16.0.912.75 এ কাজ করে না, তবে এটি ফায়ারফক্স
ভি 10.0

4

অনুরাগের উত্তরটি মূলত সঠিক। তবে Object.keys(obj)পুরানো ব্রাউজারগুলিতে সমর্থন করার জন্য আপনি নীচের কোডটি https://developer.mozilla.org/en-US/docs/Web/JavaScript/References/Global_Objects/Object/keys থেকে অনুলিপি করে ব্যবহার করতে পারেন । এটি Object.keys(obj)ব্রাউজার থেকে পাওয়া না গেলে পদ্ধতিটি যুক্ত করে ।

if (!Object.keys) {
 Object.keys = (function() {
 'use strict';
 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 = [], prop, i;

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

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

3

নোট করুন যে কফিস্ক্রিপ্টে এটি সমস্ত ব্রাউজারে এবং নোড হিসাবে সম্পন্ন করা যায়

k for k of obj

এবং এগুলো

(1 for _ of obj).length

3

ECMAScript 5 সমর্থন করে এমন ব্রাউজারগুলির জন্য পুনরাবৃত্ত সমাধান:

var getObjectKeys = function(obj) {
    var keys = Object.keys(obj);
    var length = keys.length;

    if (length !== 0) {
        for (var i = 0; i < length; i++) {
            if (typeof obj[keys[i]] === 'object') {
                keys[keys[i]] = getObjectKeys(obj[keys[i]]);
            }
        }
    }

    return keys;
};

3
var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}

console.log(Object.keys(obj));
console.log(Object.keys(obj).length)


3

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

var obj = {
    key1: 'value1',
    key2: 'value2',
    key3: 'value3',
    key4: 'value4'
}

var keys = [];
_.each( obj, function( val, key ) {
    keys.push(key);
});
console.log(keys.lenth, keys);

3

জাভাস্ক্রিপ্টে, কোনও অবজেক্ট হ'ল স্ট্যান্ডলোন সত্তা, বৈশিষ্ট্য এবং প্রকার সহ।

অ্যারে আকারে অবজেক্ট থেকে মানগুলি আনার জন্য: অবজেক্ট। মূল্যগুলি ( অবজেক্ট ) // আপজ অবজেক্টের নাম যা আপনি ফলাফল ব্যবহার করেছেন -> ["মান 1", "মান 2", "মান 3", "মান 4"]

অ্যারে আকারে অবজেক্ট থেকে কীগুলি আনার জন্য: অবজেক্ট .কি (objজ) // আপজেক্টের নাম যা আপনি ফলাফল ব্যবহার করেছেন -> ["কী 1", "কী 2", "কী 3", "কী 4"]

উভয় ফাংশন অ্যারে ফিরিয়ে দিলে আপনি দৈর্ঘ্যের সম্পত্তি ব্যবহার করে কী বা দৈর্ঘ্যের মান পেতে পারেন value উদাহরণস্বরূপ - অবজেক্ট। মূল্যসমূহ ( অবজেক্ট )। দৈর্ঘ্য বা অবজেক্ট .কিগুলি (আপত্তি)। দৈর্ঘ্য


2

JSON অবজেক্টের কীগুলি তালিকাভুক্ত কমা-বর্ণিত স্ট্রিংয়ের জন্য, নিম্নলিখিতটি চেষ্টা করুন:

function listKeys(jObj){
    var keyString = '';
    for(var k in jObj){
        keyString+=(','+k);
    }
    return keyString.slice(1);
}



/* listKeys({'a' : 'foo', 'b' : 'foo', 'c' : 'foo'}) -> 'a,b,c' */

2

ES6 ব্যবহার করে forEachআপনি কোনও অবজেক্টের কীগুলি দিয়ে পুনরাবৃত্তি করতে পারেন । সমস্ত কী পেতে আপনি ব্যবহার করতে পারেন Object.keysযা কোনও বস্তুর সমস্ত কী প্রদান করে

Object.keys(obj).forEach(function(keyValue, index, map) { 
  console.log(keyValue); 
});

উপরের স্নিপেটের সংক্ষিপ্ত হাত হবে, যা কেবলমাত্র একটি প্যারামিটার নেয়

Object.keys(obj).forEach(function(keyValue) { 
  console.log(keyValue); 
});


0

স্লাইস ব্যবহার করে প্রয়োগ করুন এবং পদ্ধতিতে যোগদান করুন।

var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.