একটি জাভাস্ক্রিপ্ট অবজেক্টের দৈর্ঘ্য


2382

আমার একটি জাভাস্ক্রিপ্ট অবজেক্ট আছে, এই অবজেক্টের দৈর্ঘ্য পাওয়ার জন্য কোনও বিল্ট-ইন বা স্বীকৃত সেরা অনুশীলনের উপায় আছে?

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

14
জাভাস্ক্রিপ্টে অবজেক্ট লিটারালগুলি পূর্বনির্ধারিত সহযোগী অ্যারেগুলি যেমন। অবজেক্ট.প্রোপার্টিনেম.প্রোপার্টিভ্যালু অবজেক্টের মতো [সম্পত্তি নাম] [প্রপার্টিভ্যালু]
নিটনি

6
: Underscore.js একটি এক-লাইনের যে এই আছে জুড়েছে stackoverflow.com/a/11346637/11236
ripper234

31
একবার লাইনের উত্তরটি অবজেক্ট.কিজ (মাইআরাই) ব্যবহার করুন।
রানাধীর রেড্ডি

67
ঠিক আছে, কেমনObject.keys(obj).length
মুহাম্মদ উমার

5
অবজেক্ট.এলথ বৈধ নয় কেন? এটি আমার জন্য সঠিক ফলাফল দেয়।
অ্যাড্রিয়ান এম

উত্তর:


2620

সর্বাধিক দৃ (় উত্তর (যেমন আপনি খুব কম বাগের কারণ হিসাবে যখন আপনি যা করার চেষ্টা করছেন তার উদ্দেশ্যটি ক্যাপচার করে) হ'ল:

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

// Get the size of an object
var size = Object.size(myObj);

জাভাস্ক্রিপ্টে এক ধরণের কনভেনশন রয়েছে যা আপনি অবজেক্ট.প্রোটোটাইপগুলিতে জিনিস যোগ করবেন না , কারণ এটি বিভিন্ন লাইব্রেরিতে তালিকাভঙ্গ করতে পারে। যদিও অবজেক্টে পদ্ধতি যুক্ত করা সাধারণত নিরাপদ।


এখানে ২০১ 2016 সালের একটি আপডেট এবং ES5 এবং এর বাইরেও ব্যাপকভাবে স্থাপনা রয়েছে IE9 + এবং অন্যান্য সমস্ত আধুনিক ES5 + সক্ষম ব্রাউজারগুলির জন্য, আপনি ব্যবহার করতে পারেন Object.keys()যাতে উপরের কোডটি কেবল হয়ে যায়:

var size = Object.keys(myObj).length;

Object.keys()এখন অন্তর্নির্মিত হওয়ার কারণে এটি কোনও বিদ্যমান প্রোটোটাইপ পরিবর্তন করতে হবে না।

সম্পাদনা করুন : অবজেক্টগুলির প্রতীকী বৈশিষ্ট্য থাকতে পারে যা অবজেক্ট.কি পদ্ধতিতে ফেরত দেওয়া যাবে না। সুতরাং উত্তরগুলি উল্লেখ না করে উত্তরটি অসম্পূর্ণ হবে।

প্রতীক প্রকারটি বস্তুগত বৈশিষ্ট্যের জন্য স্বতন্ত্র সনাক্তকারী তৈরি করতে ভাষায় যুক্ত হয়েছিল। প্রতীক প্রকারের প্রধান সুবিধা হ'ল ওভাররাইটগুলি প্রতিরোধ।

Object.keysবা Object.getOwnPropertyNamesপ্রতীকী বৈশিষ্ট্যের জন্য কাজ করে না। এগুলি ফেরত দেওয়ার জন্য আপনাকে ব্যবহার করতে হবে Object.getOwnPropertySymbols

var person = {
  [Symbol('name')]: 'John Doe',
  [Symbol('age')]: 33,
  "occupation": "Programmer"
};

const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1

let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2

65
@ ট্রেস - আপনার কোডটি নষ্ট হয়ে যেতে পারে যদি কেউ কোথাও কোথাও কোথাও কোথাও ঘোষিত না করে 'আকার' সম্পত্তিটি অতিক্রম করে চলে যায়, তাই এটি ইতিমধ্যে সংজ্ঞায়িত হয়েছে কিনা তা সর্বদা পরীক্ষা করা উচিত
vsync

19
@vsync আপনি খুব সঠিক। একজনকে সর্বদা প্রয়োজনীয় বিচক্ষণ চেকগুলি প্রয়োগ করা উচিত :)
ট্রেস

132
সবাই এটিকে কেন উপেক্ষা করছে:Object.keys(obj).length
মুহাম্মদ উমার

33
@ মুহাম্মাদউমার সম্ভবত কারণ এই উত্তরটি যখন লেখা হয়েছিল তখনও সেই পদ্ধতিটির অস্তিত্ব ছিল না। আজও এটি ব্যবহার করার জন্য সম্ভবত পুরানো ব্রাউজারগুলির জন্য পলিফিলের প্রয়োজন হবে।
ক্রিস হেইস

21
@ স্টনিউ আইই 8, আইই 9, আইই 10 হ'ল মৃত ব্রাউজার যা মাইক্রোসফ্টের সমর্থন পায় না। আইই 8, আইই 9, আইই 10 ব্যবহারকারী মাইক্রোসফ্টের কাছ থেকে বিজ্ঞপ্তি পেয়েছে যে তারা পুরানো, অসমর্থিত ব্রাউজার ব্যবহার করে এবং আশা করা উচিত যে জিনিসগুলি তাদের জন্য কার্যকর হবে না। সমর্থন.
microsoft.com/en-us/kb/3123303

1704

যদি আপনি জানেন যে আপনার hasOwnPropertyচেক সম্পর্কে চিন্তা করতে হবে না , আপনি খুব সহজভাবে এটি করতে পারেন:

Object.keys(myArray).length

23
কেন না? কি থেকে আমি জানি, এটি একটি মান developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...
VSync

104
এটি সর্বজনীনভাবে প্রয়োগ করা পদ্ধতি নয়, তবে আপনি এই টেবিলটি দিয়ে কোন ব্রাউজার সমর্থন করে তা পরীক্ষা করতে পারেন ।
aeosynth

51
কোন আইই 8 সমর্থন = নেই।
ripper234

22
ফায়ারফক্সে স্যুইচ করার সময় = দুর্ভাগ্যক্রমে, আপনি স্যুইচিংয়ের অর্থ এই নয় যে আপনার ওয়েবসাইটের ব্যবহারকারীরা ...
এমডুপ আপ

82
@ রিপার 234 কোনও আইই সমর্থন নয় = পলিফিল করার সময়
জন ডিভোরাক

287

আপডেট : আপনি যদি অ্যান্ডস্কোর.জেএস ব্যবহার করেন (প্রস্তাবিত, এটি হালকা ওজনের!), তবে আপনি ঠিক করতে পারেন

_.size({one : 1, two : 2, three : 3});
=> 3

যদি না হয় এবং আপনি যে কোনও কারণেই অবজেক্ট বৈশিষ্ট্যগুলির সাথে গোলমাল করতে চান না এবং ইতিমধ্যে jQuery ব্যবহার করছেন, একটি প্লাগইনও সমানভাবে অ্যাক্সেসযোগ্য:

$.assocArraySize = function(obj) {
    // http://stackoverflow.com/a/6700/11236
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

7
_.size()আমার উল্কা প্রকল্পের জন্য নিখুঁত সমাধান ছিল , এতে আন্ডারস্কোর.জেএস সমর্থন রয়েছে।
টোকিওরিয়েবল

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

3
অ্যান্ডস্কোর> (সমস্ত - ['লো-ড্যাশ'])
রায়জ্যাক্স

আন্ডারস্কোরস, যে জিনিসগুলি
জেএস এর

1
উত্তরাধিকারসূত্রে প্রাপ্ত বস্তুর আসল বৈশিষ্ট্যগুলি পৃথক করতে @ বেবিডিএড। বিকাশকারী.মোজিলা.আর.ইন
ডকস

56

এখানে সর্বাধিক ক্রস ব্রাউজার সমাধান।

এটি গৃহীত উত্তরের চেয়ে ভাল কারণ এটি যদি বিদ্যমান থাকে তবে দেশীয় অবজেক্ট.কিগুলি ব্যবহার করে। সুতরাং, এটি সমস্ত আধুনিক ব্রাউজারের জন্য দ্রুততম।

if (!Object.keys) {
    Object.keys = function (obj) {
        var arr = [],
            key;
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
                arr.push(key);
            }
        }
        return arr;
    };
}

Object.keys(obj).length;

6
Object.keys()এমন একটি অ্যারে প্রদান করে যা কেবলমাত্র সেই সমস্ত বৈশিষ্ট্যের নাম ধারণ করে যা গণনাযোগ্য। আপনি যদি সমস্ত বৈশিষ্ট্য সহ একটি অ্যারে চান তবে আপনার Object.getOwnPropertyNames()পরিবর্তে ব্যবহার করা উচিত । বিকাশকারী.মোজিলা.আর.ইন.ইন
রেফারেন্স/…

35

আমি জাভাস্ক্রিপ্ট বিশেষজ্ঞ নই, তবে দেখে মনে হচ্ছে আপনাকে উপাদানগুলির মধ্য দিয়ে লুপ করতে হবে এবং সেগুলি গণনা করতে হবে কারণ অবজেক্টের দৈর্ঘ্যের কোনও পদ্ধতি নেই:

var element_count = 0;
for (e in myArray) {  if (myArray.hasOwnProperty(e)) element_count++; }

@ পালমসি: ওপির প্রতি ন্যায়সঙ্গতভাবে, জাভাস্ক্রিপ্ট ডকুমেন্টেশনগুলি প্রকৃতপক্ষে স্পষ্টভাবে "এসোসিয়েটিভ অ্যারে" হিসাবে এইভাবে অবজেক্ট টাইপের ভেরিয়েবল ব্যবহার করে বোঝায়।


8
কাজ করবে না, কারণ এটি পদ্ধতিগুলিও গণনা করবে, যা প্রোটোটাইপের মাধ্যমে যুক্ত করা হয়।
লাজোস মেসারোস

30

এই পদ্ধতিটি আপনার বস্তুর সমস্ত সম্পত্তির নাম একটি অ্যারেতে পেয়ে যায়, সুতরাং আপনি সেই অ্যারের দৈর্ঘ্য পেতে পারেন যা আপনার অবজেক্টের কীগুলির দৈর্ঘ্যের সমান।

Object.getOwnPropertyNames({"hi":"Hi","msg":"Message"}).length; // => 2

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

24

প্রোটোটাইপ বা অন্যান্য কোডের সাথে গোলযোগ না করার জন্য আপনি নিজের অবজেক্টটি তৈরি এবং প্রসারিত করতে পারেন:

function Hash(){
    var length=0;
    this.add = function(key, val){
         if(this[key] == undefined)
         {
           length++;
         }
         this[key]=val;
    }; 
    this.length = function(){
        return length;
    };
}

myArray = new Hash();
myArray.add("lastname", "Simpson");
myArray.add("age", 21);
alert(myArray.length()); // will alert 2

আপনি যদি সর্বদা অ্যাড পদ্ধতি ব্যবহার করেন তবে দৈর্ঘ্যের সম্পত্তিটি সঠিক হবে। যদি আপনি উদ্বিগ্ন হন যে আপনি বা অন্যরা এটি ব্যবহার করতে ভুলে যান তবে আপনি অন্য যে দৈর্ঘ্যের পদ্ধতিতে পোস্ট করেছেন সেই সম্পত্তি কাউন্টারটি যুক্ত করতে পারেন।

অবশ্যই, আপনি সর্বদা পদ্ধতিগুলি ওভাররাইট করতে পারেন। এমনকি যদি আপনি তা করেন তবে আপনার কোড সম্ভবত উল্লেখযোগ্যভাবে ব্যর্থ হবে, এটি ডিবাগ করা সহজ করে। ;)


আমি মনে করি এটি সেরা সমাধান কারণ এটির জন্য 'লুপিং' দরকার নেই যা অ্যারে বড় হলে ব্যয়বহুল হতে পারে
এমেকা মবাঃ

20

এখানে কীভাবে এবং প্রোটোটাইপ চেইনে সম্পত্তিটি নেই তা পরীক্ষা করতে ভুলবেন না:

var element_count = 0;
for(var e in myArray)
    if(myArray.hasOwnProperty(e))
        element_count++;

20

এটি পেতে কেবল এটি ব্যবহার করুন length:

Object.keys(myObject).length

7
আপনার উত্তরটি কীভাবে
স্ট্যাকওভারফ্লো.

3
আপনার সত্যিকার অর্থেও আপনার বস্তুর নামকরণ করা উচিত নয়myArray
ব্যারি মাইকেল ডয়েল

2
@ ব্যারিমিচালডোয়েল আমি এটি পরিবর্তন করেছি :)
সৌরভগোয়াল 95৯৯

ভাল, আপনার ভেরিয়েবলের প্রকৃত নাম অনুসারে নামকরণ করা সর্বদা ভাল। আপনার কোডটি অন্যান্য ডেভসের কাছে আরও পাঠযোগ্য।
ব্যারি মাইকেল দোয়েল

4
"মাইআর্রে" -> "মাইঅবজেক্ট" সম্পাদনার আগে এটি দ্বিতীয় সর্বোচ্চ আপোভোটেড উত্তরের মতো ছিল।
ইউনোশচ

16

এখানে সম্পূর্ণ ভিন্ন সমাধান দেওয়া হয়েছে যা কেবলমাত্র আরও আধুনিক ব্রাউজারগুলিতে কাজ করবে (আই 9 + +, ক্রোম, ফায়ারফক্স 4+, অপেরা ১১.60০+, সাফারি ৫.১+)

JsFizz দেখুন

আপনার সহযোগী অ্যারে শ্রেণি সেটআপ করুন

/**
 * @constructor
 */
AssociativeArray = function () {};

// Make the length property work
Object.defineProperty(AssociativeArray.prototype, "length", {
    get: function () {
        var count = 0;
        for (var key in this) {
            if (this.hasOwnProperty(key))
                count++;
        }
        return count;
    }
});

এখন আপনি নিম্নলিখিত হিসাবে এই কোডটি ব্যবহার করতে পারেন ...

var a1 = new AssociativeArray();
a1["prop1"] = "test";
a1["prop2"] = 1234;
a1["prop3"] = "something else";
alert("Length of array is " + a1.length);

আমি মনে করি এটি নিরাপদ নয়। উদাহরণস্বরূপ এটিতে "দৈর্ঘ্য" এর কী যুক্ত উপাদান থাকতে পারে না, বিবৃতি a1 ["দৈর্ঘ্য"] = "হ্যালো ওয়ার্ল্ড"; এন্ট্রি সংরক্ষণ করতে ব্যর্থ। এছাড়াও বিবৃতি a1 ["hasOwnProperty"] = "কিছু প্রোপ"; সম্পূর্ণরূপে ফাংশনটি ভেঙে যায়
পানোস থিওফ

3
@ পানোসওফ আমি মনে করি না যে আপনি যদি lengthসম্পত্তিটি ব্যবহার করেন তবে মানটি সঞ্চয় করতে চান, যে কোনও কোডই এটি ব্যবহার করেছিল তা নিশ্চিত করতে হবে যে এটি চেষ্টা করে না এবং সংরক্ষণ করে না length, তবে আমি মনে করি এটি যদি একই রকম হত তবে একটি স্ট্যান্ডার্ড অ্যারে। যে hasOwnPropertyকোনও বস্তুতে ওভাররাইড করা সম্ভবত একটি অনাকাঙ্ক্ষিত ফলাফল আনতে পারে।
অ্যালি

16

<script>
myObj = {"key1" : "Hello", "key2" : "Goodbye"};
var size = Object.keys(myObj).length;
console.log(size);
</script>

<p id="myObj">The number of <b>keys</b> in <b>myObj</b> are: <script>document.write(size)</script></p>

এটি আমার পক্ষে কাজ করে:

var size = Object.keys(myObj).length;

15

কিছু ক্ষেত্রে কেবল একটি পৃথক ভেরিয়েবলের মধ্যে আকার সংরক্ষণ করা ভাল। বিশেষত, আপনি যদি এক জায়গায় এক উপাদান দ্বারা অ্যারে যুক্ত করে থাকেন এবং সহজেই আকারটি বৃদ্ধি করতে পারেন। আপনার প্রায়শই আকার চেক করা দরকার হলে এটি স্পষ্টতই আরও দ্রুত কাজ করবে।



14

@ পলমেসি: ওপির প্রতি ন্যায়সঙ্গতভাবে, জাভাস্ক্রিপ্ট ডকসগুলি প্রকৃতপক্ষে এইভাবে অবজেক্ট টাইপের ভেরিয়েবলগুলি "এসোসিয়েটিভ অ্যারে" হিসাবে ব্যবহার করে।

এবং পালমেসে ন্যায্যতার সাথে তিনি বেশ সঠিক ছিলেন, এগুলি সাহসী অ্যারে নয়, তারা অবশ্যই বস্তু :) - একটি সহযোগী অ্যারের কাজ করে। তবে বিস্তৃত বিন্দু সম্পর্কে আপনি সম্ভবত এটি অধিকার পেয়েছে বলে মনে হয়েছে বরং এটি ভাল সূত্রটি পেয়েছি:

জাভাস্ক্রিপ্ট "সহযোগী অ্যারে" ক্ষতিকারক হিসাবে বিবেচিত

কিন্তু এই সমস্ত অনুসারে, গৃহীত উত্তর কি নিজেই খারাপ অভ্যাস নয়?

অবজেক্টের জন্য একটি প্রোটোটাইপ আকার () ফাংশন নির্দিষ্ট করুন

যদি অবজেক্ট। প্রোটোটাইপটিতে অন্য কিছু যুক্ত করা থাকে, তবে প্রস্তাবিত কোডটি ব্যর্থ হবে:

<script type="text/javascript">
Object.prototype.size = function () {
  var len = this.length ? --this.length : -1;
    for (var k in this)
      len++;
  return len;
}
Object.prototype.size2 = function () {
  var len = this.length ? --this.length : -1;
    for (var k in this)
      len++;
  return len;
}
var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
alert("age is " + myArray["age"]);
alert("length is " + myArray.size());
</script>

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


13

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

const myMap = new Map();
myMap.set("firstname", "Gareth");
myMap.set("lastname", "Simpson");
myMap.set("age", 21);
myMap.size; // 3

11

এরকম কিছু সম্পর্কে -

function keyValuePairs() {
    this.length = 0;
    function add(key, value) { this[key] = value; this.length++; }
    function remove(key) { if (this.hasOwnProperty(key)) { delete this[key]; this.length--; }}
}

11

আমাদের যদি হ্যাশ থাকে

হ্যাশ = {"এ": "বি", "সি": "ডি"};

হ্যাশের দৈর্ঘ্য কীগুলির দৈর্ঘ্য ব্যবহার করে আমরা দৈর্ঘ্য পেতে পারি:

কি-সংকলন (হ্যাশ) .length


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

1
দুর্ভাগ্যক্রমে, আমি প্রথম ভেবেছিলাম এটি উত্তর হিসাবে ভাল না! দেখা যাচ্ছে যে কীগুলি ফাংশনটি কেবল ক্রোম এবং ফায়ারফক্স ওয়েব কনসোলগুলিতে উপলব্ধ। আপনি যদি এই কোডটি কোনও স্ক্রিপ্টে রাখেন তবে এটি আনচড রেফারেন্স এরিয়ার দিয়ে ব্যর্থ হবে: কীগুলি সংজ্ঞায়িত করা হয়নি
চিম


1
এটি কীভাবে আইওসেন্টের উত্তর থেকে আলাদা ?
পিটার মর্টেনসেন

11
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
  1. Object.values ​​(myObject) .length
  2. Object.entries (myObject) .length
  3. Object.keys (myObject) .length

কোনটি 3. উপরে মধ্যে দ্রুততর
siluveru কিরণ কুমার

অবজেক্ট.ভ্যালু (আমারঅজেক্ট)। দৈর্ঘ্য
tdjprog

আমরা কীভাবে এটি বলতে পারি যে এটি অবজেক্ট.ওয়ালুয়েসগুলি (মাইবজেক্ট)। দৈর্ঘ্যের দ্রুততর কোনও উদাহরণ রয়েছে ধন্যবাদ, @tdjprog
সিলুভেরু কিরণ কুমার

শুধু কনসোল এ চেষ্টা করুন:var myObject = {}; for (let i=0; i<10000000; i++) myObject[i] = i;
tdjprog

কেন অবজেক্ট.ভ্যালু (মায়োবজেক্ট)। দৈর্ঘ্য দ্রুত, যেখানে অবজেক্ট.এন্টরিস (মাইওজেক্ট) হিসাবে। দৈর্ঘ্য কিছুক্ষণ পরেও আউটপুট দিচ্ছে না এখানে কারণ কী? ধন্যবাদ @tdjprog
সিলুভেরু কিরণ কুমার

10

আপনি যদি কৌনিক জেএস ১.x ব্যবহার করে থাকেন তবে আপনি কোনও ফিল্টার তৈরি করে এবং নীচের মতো অন্যান্য উদাহরণ থেকে কোড ব্যবহার করে অ্যাঙ্গুলারজেএস পদ্ধতিতে কাজগুলি করতে পারেন:

// Count the elements in an object
app.filter('lengthOfObject', function() {
  return function( obj ) {
    var size = 0, key;
    for (key in obj) {
      if (obj.hasOwnProperty(key)) size++;
    }
   return size;
 }
})

ব্যবহার

আপনার নিয়ামক মধ্যে:

$scope.filterResult = $filter('lengthOfObject')($scope.object)

বা আপনার দৃষ্টিতে:

<any ng-expression="object | lengthOfObject"></any>

4
ওপি একটি কৌণিক জেএস সংস্করণ চাইেনি। এটি প্রশ্নের বৈধ উত্তর নয়।
ফ্রান্সিসকো হজ 21

10

সহজ উপায়টি এরকম

Object.keys(myobject).length

যেখানে মায়োবজেক্ট হ'ল আপনি দৈর্ঘ্যটি কী চান তার অবজেক্ট


2
এটি বিদ্যমান বিদ্যমান উত্তরের পুনরাবৃত্তি বলে মনে হয় ।
পং

@ পাং সম্মত হয়েছে এবং এটি অন্যান্য উত্তরগুলির মতো আর কোনও প্রসঙ্গ সরবরাহ করে না।
রহস্যময়

8

আপনি যদি ইন্টারনেট এক্সপ্লোরার 8 বা তার চেয়ে কম সমর্থন করার বিষয়ে চিন্তা না করেন তবে নিম্নলিখিত দুটি পদক্ষেপ প্রয়োগ করে আপনি সহজেই কোনও বস্তুর গুণাবলীর সংখ্যা পেতে পারেন:

  1. হয় Object.keys()এমন একটি অ্যারের পেতে চালান যা কেবলমাত্র সেই সমস্ত সংখ্যারই নাম রয়েছে যা গুণনীয়যোগ্য বা Object.getOwnPropertyNames()আপনি যদি এমন বৈশিষ্ট্যগুলির নামও অন্তর্ভুক্ত করতে চান যা গুণনীয়যোগ্য নয়।
  2. .lengthসেই অ্যারের সম্পত্তি পান ।

আপনার যদি একাধিকবার এটি করার প্রয়োজন হয় তবে আপনি এই যুক্তিটি কোনও কার্যক্রমে গুটিয়ে রাখতে পারেন:

function size(obj, enumerablesOnly) {
    return enumerablesOnly === false ?
        Object.getOwnPropertyNames(obj).length :
        Object.keys(obj).length;
}

এই নির্দিষ্ট ফাংশনটি কীভাবে ব্যবহার করবেন:

var myObj = Object.create({}, {
    getFoo: {},
    setFoo: {}
});
myObj.Foo = 12;

var myArr = [1,2,5,4,8,15];

console.log(size(myObj));        // Output : 1
console.log(size(myObj, true));  // Output : 1
console.log(size(myObj, false)); // Output : 3
console.log(size(myArr));        // Output : 6
console.log(size(myArr, true));  // Output : 6
console.log(size(myArr, false)); // Output : 7

একটি ডেমো জন্য এই Fiddle দেখুন ।


8

Object.keys(myObject).lengthঅবজেক্ট / অ্যারের দৈর্ঘ্য পেতে ব্যবহার করুন

var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

console.log(Object.keys(myObject).length); //3

8
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

console.log(Object.keys(myObject).length)

// o/p 3

7

উপরের কয়েকটিতে একটি বৈকল্পিকতা হ'ল:

var objLength = function(obj){    
    var key,len=0;
    for(key in obj){
        len += Number( obj.hasOwnProperty(key) );
    }
    return len;
};

হ্যাশঅনপ্রপকে সংহত করার জন্য এটি কিছুটা মার্জিত উপায়।


6

জেমস কোগানের উত্তরের একটি আলাদা সংস্করণ এখানে। যুক্তি পাস করার পরিবর্তে, কেবলমাত্র বস্তু শ্রেণীর প্রোটোটাইপ করুন এবং কোডটি ক্লিনার করুন।

Object.prototype.size = function () {
    var size = 0,
        key;
    for (key in this) {
        if (this.hasOwnProperty(key)) size++;
    }
    return size;
};

var x = {
    one: 1,
    two: 2,
    three: 3
};

x.size() === 3;

জেএসফিল উদাহরণ: http://jsfiddle.net/qar4j/1/


6
Object.prototype- খারাপ ধারণা।
ডিজিয়াদ বোরোয়

@tborychowski আপনি দয়া করে ব্যাখ্যা করতে পারেন কেন?
মোহাম্মাদ 13

এখানে একটি নিবন্ধ: বিট.লি / 1 ড্রোআরজিআর । আমি বলছি না এটি করা উচিত নয়, কেবল এটি করার আগে আপনাকে সমস্ত প্রতিবেদনগুলি জানতে হবে।
ডিজিড বোরোয়

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

5

Object.keys(obj).lengthদৈর্ঘ্য পেতে আপনি যেকোন বস্তুতে কেবল এটি ব্যবহার করতে পারেন । অবজেক্ট.কিজ সমস্ত বস্তু কী (বৈশিষ্ট্য) সমন্বিত একটি অ্যারে প্রদান করে যা সংশ্লিষ্ট অ্যারেটির দৈর্ঘ্য ব্যবহার করে সেই বস্তুর দৈর্ঘ্য সন্ধান করার জন্য কাজে আসতে পারে। এমনকি আপনি এই জন্য একটি ফাংশন লিখতে পারেন । আসুন আমরা সৃজনশীল হয়ে উঠি এবং এর জন্য একটি পদ্ধতিও লিখি (আরও স্বাচ্ছন্দ্যকর সংস্থানকারী সম্পত্তি সহ):

function objLength(obj)
{
  return Object.keys(obj).length;
}

console.log(objLength({a:1, b:"summit", c:"nonsense"}));

// Works perfectly fine
var obj = new Object();
obj['fish'] = 30;
obj['nullified content'] = null;
console.log(objLength(obj));

// It also works your way, which is creating it using the Object constructor
Object.prototype.getLength = function() {
   return Object.keys(this).length;
}
console.log(obj.getLength());

// You can also write it as a method, which is more efficient as done so above

Object.defineProperty(Object.prototype, "length", {get:function(){
    return Object.keys(this).length;
}});
console.log(obj.length);

// probably the most effictive approach is done so and demonstrated above which sets a getter property called "length" for objects which returns the equivalent value of getLength(this) or this.getLength()


3
এটি কীভাবে আইওসেন্টের উত্তর থেকে আলাদা ?
পিটার মর্টেনসেন

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

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

এছাড়াও, কিভাবে একটি পদ্ধতি "আরও দক্ষ" রচনা?
user4642212

5

আপনি সর্বদা সাধারণ অ্যারে Object.getOwnPropertyNames(myObject).lengthহিসাবে [].lengthযে ফলাফল দেয় তেমন ফলাফল পেতে সর্বদা করতে পারেন ।


1
Object.keys()এমন একটি অ্যারে প্রদান করে যা কেবলমাত্র সেই সমস্ত বৈশিষ্ট্যের নাম ধারণ করে যা গণনাযোগ্য। আপনি যদি সমস্ত বৈশিষ্ট্য সহ একটি অ্যারে চান তবে আপনার Object.getOwnPropertyNames()পরিবর্তে ব্যবহার করা উচিত । বিকাশকারী.মোজিলা.আর.ইন.ইন
রেফারেন্স/…

3
এটি কীভাবে আইওসেন্টের উত্তর থেকে আলাদা ?
পিটার মর্টেনসেন


4

গেমটি থেকে কিছুটা দেরি করা হয়েছে তবে এটি অর্জনের একটি দুর্দান্ত উপায় দৈর্ঘ্যের সম্পত্তিতে একটি যাদু গেটারের সংজ্ঞা দেওয়া:

Object.defineProperty(Object.prototype, "length", {
    get: function () {
        return Object.keys(this).length;
    }
});

এবং আপনি কেবল এটির মতো ব্যবহার করতে পারেন:

var myObj = { 'key': 'value' };
myObj.length;

দিতেন 1


1
প্রোটোটাইপ পরিবর্তনের বিরুদ্ধে যুক্তিগুলি একদিকে রেখে বললাম, ব্যক্তিগতভাবে আমি এটির কারণে কোনও বাগ পেয়েছি এবং জাভাস্ক্রিপ্টের একটি শক্তিশালী বিষয় আমার কাছে।
ম্যাক্রোম্যান

3

নীচে যারা সরাসরি জাভাস্ক্রিপ্ট পরিত্যাগ করেছেন তাদের জন্য কফিস্ক্রিপ্টে জেমস কোগলানের উত্তরের একটি সংস্করণ দেওয়া হয়েছে:

Object.size = (obj) ->
  size = 0
  size++ for own key of obj
  size

1
আপনি সম্ভবত বলতে চেয়েছিলেন size++ for own key of obj( own keyকফিস্ক্রিপ্টে সিনট্যাক্স চিনিযুক্ত)। hasOwnPropertyঅবজেক্ট থেকে সরাসরি ব্যবহার করা বিপজ্জনক, কারণ বস্তুটির আসলে এমন সম্পত্তি থাকলে তা ভেঙে যায়।
কনরাড বোরোস্কি

2
ওপি কফিস্ক্রিপ্ট সংস্করণ চেয়েছিল না, এটির মতো ট্যাগও রয়েছে। এটি প্রশ্নের বৈধ উত্তর নয়।
ফ্রান্সিসকো হজ 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.