Panjang objek JavaScript

2384

Saya memiliki objek JavaScript, apakah ada cara praktik terbaik bawaan atau yang diterima untuk mendapatkan panjang objek ini?

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
Gareth Simpson
sumber
15
Literal objek dalam javascript secara default adalah asosiatif array, misalnya object.propertyName.propertyValue sama dengan objek [propertyName] [propertyValue]
neitony
6
Menambahkan liner satu di Underscore.js yang melakukan ini: stackoverflow.com/a/11346637/11236
ripper234
31
Setelah baris jawaban gunakan Object.keys (myArray). Panjang seperti kata @aeosynth.
Ranadheer Reddy
67
ok, bagaimanaObject.keys(obj).length
Muhammad Umer
5
Mengapa object.length tidak valid? Ini mengembalikan hasil yang benar untuk saya.
Adrian M

Jawaban:

2624

Jawaban yang paling kuat (yaitu yang menangkap maksud dari apa yang Anda coba lakukan sambil menyebabkan bug paling sedikit) adalah:

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);

Ada semacam konvensi dalam JavaScript yang Anda tidak menambahkan hal-hal ke Object.prototype , karena itu dapat merusak enumerasi di berbagai perpustakaan. Menambahkan metode ke Objek biasanya aman.


Berikut ini adalah pembaruan pada 2016 dan penyebaran luas ES5 dan seterusnya. Untuk IE9 + dan semua browser yang mampu ES5 + modern lainnya, Anda dapat menggunakan Object.keys()kode di atas menjadi:

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

Ini tidak harus memodifikasi prototipe yang ada karena Object.keys()sekarang sudah ada di dalamnya .

Sunting : Objek dapat memiliki sifat simbolis yang tidak dapat dikembalikan melalui metode Object.key. Jadi jawabannya tidak lengkap tanpa menyebutkannya.

Jenis simbol ditambahkan ke bahasa untuk membuat pengidentifikasi unik untuk properti objek. Manfaat utama dari tipe Symbol adalah pencegahan overwrites.

Object.keysatau Object.getOwnPropertyNamestidak berfungsi untuk properti simbolik. Untuk mengembalikannya, Anda harus menggunakan 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

sumber
65
@Tres - kode Anda dapat rusak jika seseorang datang dan mengesampingkan properti 'size' tanpa mengetahui Anda telah mendeklarasikannya di suatu tempat di dalam kode, jadi selalu ada baiknya memeriksa jika sudah ditentukan
vsync
19
@ vsync Anda sangat benar. Seseorang harus selalu menerapkan pemeriksaan kewarasan yang diperlukan :)
Tres
132
Mengapa semua orang mengabaikan ini:Object.keys(obj).length
Muhammad Umer
33
@MuhammadUmer Mungkin karena metode itu bahkan tidak ada ketika jawaban ini ditulis. Bahkan hari ini, menggunakannya mungkin memerlukan polyfill untuk browser lama.
Chris Hayes
21
@stonyau IE8, IE9, IE10 adalah browser mati yang tidak mendapatkan dukungan dari Microsoft. Pengguna IE8, IE9, IE10 mendapat pemberitahuan dari Microsoft, bahwa mereka menggunakan peramban lama yang tidak didukung dan harus mengharapkan hal-hal tidak akan berfungsi untuk mereka. support.microsoft.com/en-us/kb/3123303
Lukas Liesis
1708

Jika Anda tahu Anda tidak perlu khawatir tentang hasOwnPropertycek, Anda dapat melakukannya dengan sangat sederhana:

Object.keys(myArray).length
aeosynth
sumber
23
kenapa tidak? dari apa yang saya tahu, itu adalah standar: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
vsync
104
Ini bukan metode yang diterapkan secara universal , tetapi Anda dapat memeriksa browser mana yang mendukungnya dengan tabel ini .
aeosynth
51
Tidak ada dukungan IE8 = no go.
ripper234
22
waktu untuk beralih ke firefox = sayangnya, Anda beralih tidak berarti pengguna situs web Anda akan ...
mdup
82
@ ripper234 tidak ada dukungan IE = waktu untuk polyfill
John Dvorak
287

Diperbarui : Jika Anda menggunakan Underscore.js (disarankan, ini ringan!), Maka Anda bisa melakukannya

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

Jika tidak , dan Anda tidak ingin dipusingkan dengan properti Object untuk alasan apa pun, dan sudah menggunakan jQuery, sebuah plugin dapat diakses dengan sama:

$.assocArraySize = function(obj) {
    // http://stackoverflow.com/a/6700/11236
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};
ripper234
sumber
7
_.size()adalah solusi sempurna untuk proyek Meteor saya , yang memiliki dukungan underscore.js.
tokyovariable
4
Saya menggunakan garis bawah dan posting ini hanya mengingatkan saya bahwa saya tidak cukup menggunakannya dalam proyek ini. Jika Anda menangani objek, Anda harus memiliki underscore.js.
jbolanos
3
Garis Bawah> (semua - ['lo-dash'])
Rayjax
underscorejs, hal-hal yang seharusnya di bawah js :)
minhajul
1
@ Babydead untuk membedakan properti nyata dari objek vs yang diwarisi. developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
ripper234
56

Inilah solusi lintas-peramban yang paling banyak.

Ini lebih baik daripada jawaban yang diterima karena menggunakan Object.keys asli jika ada. Dengan demikian, ini adalah yang tercepat untuk semua browser modern.

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;
Joon
sumber
6
Object.keys()mengembalikan array yang hanya berisi nama-nama properti yang dapat dihitung. Jika Anda menginginkan array dengan SEMUA properti, Anda harus menggunakannya Object.getOwnPropertyNames(). Lihat developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
John Slegers
35

Saya bukan pakar JavaScript, tetapi sepertinya Anda harus mengulang-ulang elemen dan menghitungnya karena Object tidak memiliki metode panjang:

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

@palmsey: Sejujurnya pada OP, dokumentasi JavaScript sebenarnya secara eksplisit merujuk pada penggunaan variabel tipe Objek dengan cara ini sebagai "array asosiatif".

jj33
sumber
8
Tidak akan berfungsi, karena akan menghitung metode juga, yang ditambahkan melalui prototipe.
Lajos Meszaros
30

Metode ini mendapatkan semua nama properti objek Anda dalam array, sehingga Anda bisa mendapatkan panjang array yang sama dengan panjang kunci objek Anda.

Object.getOwnPropertyNames({"hi":"Hi","msg":"Message"}).length; // => 2
venkat7668
sumber
Metode @PatrickRoberts kunci tidak mengembalikan properti dari rantai prototipe. Jadi mengapa kebutuhan untuk memiliki Properti di sini. Juga getOwnProperty akan mengembalikan properti tersembunyi, karena panjangnya dalam array dll.
Muhammad Umer
24

Untuk tidak mengacaukan prototipe atau kode lain, Anda dapat membuat dan memperluas objek Anda sendiri:

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

Jika Anda selalu menggunakan metode add, properti panjang akan benar. Jika Anda khawatir bahwa Anda atau orang lain lupa menggunakannya, Anda bisa menambahkan penghitung properti yang juga diposkan orang lain ke metode panjang.

Tentu saja, Anda selalu bisa menimpa metode. Tetapi bahkan jika Anda melakukannya, kode Anda mungkin akan gagal terlihat, membuatnya mudah untuk di-debug. ;)

DanMan
sumber
Saya pikir ini adalah solusi terbaik karena tidak memerlukan perulangan dengan 'untuk' yang bisa mahal jika arraynya besar
Emeka Mbah
20

Inilah cara dan jangan lupa untuk memeriksa bahwa properti tersebut tidak ada dalam rantai prototipe:

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

Cukup gunakan ini untuk mendapatkan length:

Object.keys(myObject).length
saurabhgoyal795
sumber
7
tolong jelaskan bagaimana jawaban Anda berbeda dari stackoverflow.com/a/6700/8632727
Patata
3
Anda juga seharusnya tidak benar-benar menyebutkan nama objek AndamyArray
Barry Michael Doyle
2
@BarryMichaelDoyle saya telah mengubah itu :)
saurabhgoyal795
Bagus, selalu lebih baik untuk memberi nama variabel Anda sesuai dengan apa sebenarnya mereka. Membuat kode Anda lebih mudah dibaca oleh pengembang lainnya.
Barry Michael Doyle
4
Sebelum pengeditan "myArray" -> "myObject", ini identik dengan jawaban tertinggi kedua yang dipilih.
Yunnosch
16

Berikut adalah solusi yang sama sekali berbeda yang hanya akan berfungsi di browser yang lebih modern (IE9 +, Chrome, Firefox 4+, Opera 11.60+, Safari 5.1+)

Lihat jsFiddle

Atur kelas Array Asosiatif Anda

/**
 * @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;
    }
});

Sekarang Anda dapat menggunakan kode ini sebagai berikut ...

var a1 = new AssociativeArray();
a1["prop1"] = "test";
a1["prop2"] = 1234;
a1["prop3"] = "something else";
alert("Length of array is " + a1.length);
Sekutu
sumber
Saya pikir itu tidak aman. Misalnya tidak dapat memiliki elemen dengan kunci "length", pernyataan a1 ["length"] = "Hello world"; gagal menyimpan entri. Juga pernyataan a1 ["hasOwnProperty"] = "some prop"; totaly merusak fungsi
Panos Theof
3
@PanosTheof Saya tidak berpikir Anda ingin menyimpan nilai jika Anda menggunakan lengthproperti, kode apa pun yang menggunakannya harus memastikan tidak mencoba dan menyimpan melawan length, tapi saya kira itu akan sama jika itu array standar juga. Mengesampingkan hasOwnPropertyobjek apa pun kemungkinan besar akan menghasilkan hasil yang tidak diinginkan.
Ally
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>

Ini bekerja untuk saya:

var size = Object.keys(myObj).length;
Giovanni G. PY
sumber
15

Untuk beberapa kasus, lebih baik menyimpan ukuran dalam variabel terpisah. Terutama, jika Anda menambahkan ke array dengan satu elemen di satu tempat dan dapat dengan mudah menambah ukuran. Jelas akan bekerja lebih cepat jika Anda perlu memeriksa ukurannya sesering mungkin.

Jānis Elmeris
sumber
15

Menggunakan:

var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
obj = Object.keys(myArray).length;
console.log(obj)

Mahendra Kulkarni
sumber
14

@palmsey: Dalam keadilan untuk OP, dokumen javascript sebenarnya secara eksplisit merujuk menggunakan variabel tipe Objek dengan cara ini sebagai "array asosiatif".

Dan dalam keadilan untuk @palmsey dia cukup benar, mereka bukan array asosiatif, mereka pasti objek :) - melakukan pekerjaan array asosiatif. Tetapi mengenai poin yang lebih luas, Anda tampaknya memiliki hak untuk itu menurut artikel yang agak bagus yang saya temukan:

JavaScript “Array Asosiatif” Dianggap Berbahaya

Tetapi menurut semua ini, bukankah jawaban yang diterima itu sendiri merupakan praktik yang buruk?

Tentukan fungsi ukuran prototipe () untuk Objek

Jika ada yang lain telah ditambahkan ke Object .prototype, maka kode yang disarankan akan gagal:

<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>

Saya tidak berpikir bahwa jawaban harus yang diterima karena tidak dapat dipercaya untuk bekerja jika Anda memiliki kode lain yang berjalan dalam konteks eksekusi yang sama. Untuk melakukannya dengan cara yang kuat tentunya Anda perlu menentukan metode ukuran dalam myArray dan memeriksa jenis anggota saat Anda mengulanginya.

Polsonby
sumber
13

Jika Anda membutuhkan struktur data asosiatif yang memperlihatkan ukurannya, lebih baik gunakan peta daripada objek.

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

Bagaimana dengan sesuatu yang seperti ini --

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--; }}
}
Jerry
sumber
11

Jika kita memiliki hash

hash = {"a": "b", "c": "d"};

kita bisa mendapatkan panjang menggunakan panjang kunci yang merupakan panjang dari hash:

kunci (hash) .panjang

abo-elleef
sumber
2
Ini adalah jawaban yang bagus, namun saya tidak dapat menemukan dokumentasi untuk fungsi tombol ini. Jadi saya tidak bisa percaya pada dukungan browser lintas.
chim
1
Sayangnya, ini bukan jawaban yang baik seperti yang saya pikirkan! Ternyata fungsi tombol hanya tersedia di konsol web chrome dan firefox. Jika Anda memasukkan kode ini ke skrip maka akan gagal dengan Uncaught ReferenceError: kunci tidak ditentukan
chim
1
Bagaimana ini berbeda dari jawaban aeosynth ?
Peter Mortensen
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
tdjprog
sumber
Yang mana yang lebih cepat di antara 3. di atas
siluveru kiran kumar
Object.values ​​(myObject)
.length
bagaimana kita dapat mengatakan bahwa itu Object.values ​​(myObject). Panjang lebih cepat apakah ada contoh Terima kasih, @tdjprog
siluveru kiran kumar
coba saja ini di konsol:var myObject = {}; for (let i=0; i<10000000; i++) myObject[i] = i;
tdjprog
mengapa Object.values ​​(myObject) .length lebih cepat, sedangkan Object.entries (myObject) .length tidak memberikan output bahkan setelah beberapa saat apa alasannya di sini? Terima kasih @tdjprog
siluveru kiran kumar
10

Jika Anda menggunakan AngularJS 1.x Anda dapat melakukan berbagai hal dengan cara AngularJS dengan membuat filter dan menggunakan kode dari salah satu contoh lain seperti berikut:

// 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;
 }
})

Pemakaian

Di controller Anda:

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

Atau menurut Anda:

<any ng-expression="object | lengthOfObject"></any>
pcnate
sumber
4
OP belum meminta versi AngularJS. Ini bukan jawaban yang valid untuk pertanyaan itu.
Francisco Hodge
10

Cara paling sederhana adalah seperti ini

Object.keys(myobject).length

di mana objek saya adalah objek dari apa yang Anda inginkan panjangnya

Mithu A Quayium
sumber
2
Tampaknya ini hanya pengulangan dari jawaban yang ada ini .
Pang
@ Pang setuju, dan itu tidak memberikan konteks lebih lanjut seperti jawaban lain.
Mistik
8

Jika Anda tidak peduli tentang mendukung Internet Explorer 8 atau lebih rendah, Anda dapat dengan mudah mendapatkan jumlah properti di objek dengan menerapkan dua langkah berikut:

  1. Jalankan baik Object.keys()untuk mendapatkan array yang hanya berisi nama-nama properti yang dapat dihitung atau Object.getOwnPropertyNames()jika Anda ingin juga menyertakan nama properti yang tidak dapat dihitung.
  2. Dapatkan .lengthproperti dari array itu.

Jika Anda perlu melakukan ini lebih dari sekali, Anda bisa membungkus logika ini dalam suatu fungsi:

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

Cara menggunakan fungsi khusus ini:

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

Lihat juga Fiddle ini untuk demo.

John Slegers
sumber
8

Gunakan Object.keys(myObject).lengthuntuk mendapatkan panjang objek / array

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

console.log(Object.keys(myObject).length); //3
Shaheb
sumber
8
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

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

// o/p 3
Dev216
sumber
7

Variasi pada beberapa hal di atas adalah:

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

Ini adalah cara yang sedikit lebih elegan untuk mengintegrasikan hasOwnProp.

menyeberangi harrell
sumber
6

Inilah versi berbeda dari jawaban James Cogan. Alih-alih menyampaikan argumen, cukup prototipe kelas Object dan buat kode lebih bersih.

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;

contoh jsfiddle: http://jsfiddle.net/qar4j/1/

Sherzod
sumber
6
Object.prototype- ide buruk.
Dziad Borowy
@tborychowski dapatkah Anda jelaskan alasannya?
Mohamad
inilah satu artikel: bit.ly/1droWrG . Saya tidak mengatakan itu tidak boleh dilakukan, hanya bahwa Anda perlu mengetahui semua dampak sebelum Anda melakukan ini.
Dziad Borowy
Jika Anda akan memperpanjang prototipe bawaan atau polyfill sebuah properti (mis. Monkey-patch), silakan lakukan dengan benar: untuk meneruskan kompatibilitas, periksa apakah properti itu ada terlebih dahulu, kemudian buat properti itu tidak dapat dihitung sehingga kuncinya sendiri benda yang dibangun tidak tercemar. Untuk metode gunakan metode aktual . Rekomendasi saya: ikuti contoh-contoh ini yang menunjukkan bagaimana cara menambahkan metode yang berperilaku semirip mungkin dengan metode bawaan.
user4642212
5

Anda cukup menggunakan Object.keys(obj).lengthpada objek apa saja untuk mendapatkan panjangnya. Object.keys mengembalikan array yang berisi semua kunci objek (properti) yang berguna untuk menemukan panjang objek yang menggunakan panjang array yang sesuai. Anda bahkan dapat menulis fungsi untuk ini. Mari berkreasi dan menulis metode untuk itu (bersama dengan properti pengambil yang lebih ramah):

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()

Mistik
sumber
3
Bagaimana ini berbeda dari jawaban aeosynth ?
Peter Mortensen
Itu karena itu menunjukkan bagaimana menjadikannya sebagai fungsi dan metode objek global (lebih berorientasi objek dan menggunakan beberapa bentuk enkapsulasi); Namun jawaban aeosynth tidak.
Mystical
Jika Anda akan memperpanjang prototipe bawaan atau polyfill sebuah properti (mis. Monkey-patch), silakan lakukan dengan benar: untuk meneruskan kompatibilitas, periksa apakah properti itu ada terlebih dahulu, kemudian buat properti itu tidak dapat dihitung sehingga kuncinya sendiri benda yang dibangun tidak tercemar. Untuk metode gunakan metode aktual . Rekomendasi saya: ikuti contoh-contoh ini yang menunjukkan bagaimana cara menambahkan metode yang berperilaku semirip mungkin dengan metode bawaan.
user4642212
Juga, bagaimana menulis metode "lebih efisien"?
user4642212
5

Anda selalu dapat melakukan Object.getOwnPropertyNames(myObject).lengthuntuk mendapatkan hasil yang sama seperti yang [].lengthakan diberikan untuk array normal.

Pian0_M4n
sumber
1
Object.keys()mengembalikan array yang hanya berisi nama-nama properti yang dapat dihitung. Jika Anda menginginkan array dengan SEMUA properti, Anda harus menggunakannya Object.getOwnPropertyNames(). Lihat developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
John Slegers
3
Bagaimana ini berbeda dari jawaban aeosynth ?
Peter Mortensen
4

Kita dapat menemukan panjang Obyek dengan menggunakan:

Object.values(myObject).length
solanki ...
sumber
4

Agak terlambat untuk permainan, tetapi cara yang bagus untuk mencapai ini (hanya IE9 +) adalah dengan mendefinisikan pengambil sihir pada properti panjang:

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

Dan Anda bisa menggunakannya seperti ini:

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

Akan memberi 1.

MacroMan
sumber
1
Argumen terhadap modifikasi prototipe samping, saya pribadi TIDAK PERNAH memiliki bug yang disebabkan olehnya dan bagi saya adalah salah satu poin kuat dari JavaScript.
MacroMan
3

Di bawah ini adalah versi jawaban James Coglan di CoffeeScript untuk mereka yang telah meninggalkan JavaScript langsung :)

Object.size = (obj) ->
  size = 0
  size++ for own key of obj
  size
Eric Anderson
sumber
1
Anda mungkin ingin mengatakan size++ for own key of obj( own keymenjadi sintaksis dalam CoffeeScript). Menggunakan hasOwnPropertylangsung dari objek itu berbahaya, karena rusak ketika objek benar-benar memiliki properti seperti itu.
Konrad Borowski
2
OP tidak meminta versi CoffeeScript, juga tidak ditandai. Ini bukan jawaban yang valid untuk pertanyaan itu.
Francisco Hodge