Pertanyaan Iterasi melalui properti objek


var obj = {
    name: "Simon",
    age: "20",
    clothing: {
        style: "simple",
        hipster: false
    }
}

for(var propt in obj){
    alert(propt + ': ' + obj[propt]);
}

Bagaimana variabelnya propt mewakili sifat-sifat objek? Ini bukan metode bawaan atau properti. Lalu mengapa ia muncul dengan setiap properti di objek?


1512
2017-11-29 14:30


asal


Jawaban:


Iterasi atas properti membutuhkan tambahan ini hasOwnProperty memeriksa:

for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

Ini diperlukan karena prototipe objek mengandung properti tambahan untuk objek yang secara teknis merupakan bagian dari objek. Properti tambahan ini diwarisi dari kelas objek dasar, tetapi masih merupakan properti object.

hasOwnProperty hanya memeriksa untuk melihat apakah ini adalah properti khusus untuk kelas ini, dan tidak ada yang diwarisi dari kelas dasar.


2052
2018-05-24 12:38



Mulai dari JavaScript 1.8.5 yang bisa Anda gunakan Object.keys(obj) untuk mendapatkan Array dari properti yang didefinisikan pada objek itu sendiri (yang mengembalikan nilai true) obj.hasOwnProperty(key)).

Object.keys(obj).forEach(function(key,index) {
    // key: the name of the object key
    // index: the ordinal position of the key within the object 
});

Ini lebih baik (dan lebih mudah dibaca) daripada menggunakan for-in loop.

Dukungannya pada peramban ini:

  • Firefox (Gecko): 4 (2,0)
  • Chrome: 5
  • Internet Explorer: 9

Lihat Jaringan Pengembang Mozilla Object.keys ()referensi untuk informasi lebih lanjut.


773
2017-08-13 07:19



Ini adalah for...in statement (MDN, Spesifikasi ECMAScript).

Anda bisa membacanya sebagai "UNTUK setiap properti DI itu obj objek, tetapkan setiap properti ke PROPT variabel secara bergantian ".


189
2017-11-29 14:32



Cewek dan cowok kita di tahun 2017 dan kita tidak punya banyak waktu untuk mengetik ... Jadi mari kita lakukan ECMAScript mewah baru yang keren ini 2016:

Object.keys(obj).forEach(e => console.log(`key=${e}  value=${obj[e]}`));

142
2017-11-22 08:47



Dalam versi ES yang akan datang, Anda dapat menggunakannya Object.entries:

for (const [key, value] of Object.entries(obj)) { }

atau

Object.entries(obj).forEach(([key, value]) => ...)

Jika Anda hanya ingin mengulangi nilai-nilai, kemudian gunakan Object.values:

for (const value of Object.values(obj)) { }

atau

Object.values(obj).forEach(value => ...)

57
2017-09-13 06:41



Itu hanya a for...in lingkaran. Periksa dokumentasi di Mozilla.


37
2017-11-29 14:33



jquery memungkinkan Anda melakukan ini sekarang:

$.each( obj, function( key, value ) {
  alert( key + ": " + value );
});

20
2018-03-29 15:19



Jawaban di atas sedikit menjengkelkan karena mereka tidak menjelaskan apa yang Anda lakukan di dalam loop setelah Anda memastikan itu objek: ANDA TIDAK MENGAKSESNYA LANGSUNG! Anda sebenarnya hanya mengirimkan KUNCI yang perlu Anda terapkan ke OBJ:

var obj = {
  a: "foo",
  b: "bar",
  c: "foobar"
};

// We need to iterate the string keys (not the objects)
for(var someKey in obj)
{
  // We check if this key exists in the obj
  if (obj.hasOwnProperty(someKey))
  {
    // someKey is only the KEY (string)! Use it to get the obj:
    var myActualPropFromObj = obj[someKey]; // Since dynamic, use [] since the key isn't literally named "someKey"

    // NOW you can treat it like an obj
    var shouldBeBar = myActualPropFromObj.b;
  }
}

Ini semua ECMA5 aman. Bahkan bekerja dalam versi JS yang payah seperti Rhino;)


12
2017-10-28 05:39



Anda dapat menggunakan Lodash. Dokumentasi 

var obj = {a: 1, b: 2, c: 3};
_.keys(obj).forEach(function (key) {
    ...
});

11
2017-11-04 16:51



The for ... in loop mewakili setiap properti dalam suatu objek karena itu sama seperti loop. Anda mendefinisikan propt di untuk ... dalam lingkaran dengan melakukan:

    for(var propt in obj){
alert(propt + ': ' + obj[propt]);
}

A untuk ... di loop iterates melalui sifat enumerable dari suatu objek. Variabel mana pun yang Anda tetapkan, atau dimasukkan ke dalam ... dalam loop, berubah setiap kali ia pergi ke properti berikutnya iterates. Variabel di untuk ... di loop iterates melalui kunci, tetapi nilai itu adalah nilai kunci itu. Sebagai contoh:

    for(var propt in obj) {
      console.log(propt);//logs name
      console.log(obj[propt]);//logs "Simon"
    }

Anda dapat melihat bagaimana variabel berbeda dari nilai variabel. Sebaliknya, untuk ... loop melakukan sebaliknya.

Saya harap ini membantu.


10
2018-01-24 03:57