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


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.