Tambahkan properti ke larik objek

103

Saya memiliki array objek seperti yang ditunjukkan di bawah ini

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
1:Object
       id=2     
       name:'david'

Saya ingin menambahkan satu properti lagi bernama Active ke setiap elemen dari array Objects ini.

Hasil akhirnya harus sebagai berikut.

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
       Active: "false"
1:Object
       id=2     
       name:'david'
       Active: "false"

Adakah yang bisa memberi tahu saya bagaimana mencapai ini.

Patrick
sumber
6
Ulangi array. Tambahkan properti ke setiap elemen array saat melakukan perulangan. Bagian mana yang Anda tidak tahu bagaimana melakukannya?
JJJ

Jawaban:

147

Anda dapat menggunakan forEachmetode ini untuk menjalankan fungsi yang disediakan satu kali untuk setiap elemen dalam larik. Dalam fungsi yang disediakan ini Anda dapat menambahkan Activeproperti ke elemen.

Results.forEach(function (element) {
  element.Active = "false";
});
Tholle
sumber
204

atau gunakan map

Results.map(obj=> ({ ...obj, Active: 'false' }))

Diedit untuk mencerminkan komentar oleh @adrianolsk agar tidak mengubah aslinya dan malah mengembalikan objek baru untuk masing-masing.

Baca spesifikasinya

sidonaldson.dll
sumber
4
hanya didukung di ES6
Amaynut
5
ES5 tepatnya;) - tetapi babel akan dengan senang hati mendekompilasinya
sidonalds
50
map harus mengembalikan larik baru bukan mengubah objek, dalam hal ini forEach akan lebih baik, atau gunakan map dan kembalikan objek baruResults.map(obj=> ({ ...obj, Active : 'false' }))
adrianolsk
4
Solusi hebat @adrianolsk, Anda harus mengirimkannya sebagai jawaban terpisah.
Michael Hays
2
  Object.defineProperty(Results, "Active", {value : 'true',
                       writable : true,
                       enumerable : true,
                       configurable : true});
Ivan De Jesus Quezada Segura
sumber
Mendefinisikan properti dinamis menggunakan Object.defineProperty.
Ivan De Jesus Quezada Segura
1

Saya juga mengalami masalah ini, dan saat mencoba mengatasinya, saya terus merusak tab chrome yang menjalankan aplikasi saya. Sepertinya operator penyebaran objek adalah pelakunya.

Dengan sedikit bantuan dari komentar adrianolsk dan jawaban sidonaldson di atas, saya menggunakan Object.assign () output dari operator spread dari babel, seperti ini:

this.options.map(option => {
  // New properties to be added
  const newPropsObj = {
    newkey1:value1,
    newkey2:value2
  };

  // Assign new properties and return
  return Object.assign(option, newPropsObj);
});
Joel Balmer
sumber
0

Ini melewati objek sebagai struktur nilai kunci. Kemudian itu akan menambahkan properti baru bernama 'Aktif' dan nilai sampel untuk properti ini ('Aktif) ke setiap objek di dalam objek ini. kode ini dapat diterapkan untuk larik objek dan objek objek.

   Object.keys(Results).forEach(function (key){
            Object.defineProperty(Results[key], "Active", { value: "the appropriate value"});
        });
Arash MAS
sumber
Ya tentu, Ini melewati objek sebagai struktur nilai kunci. Kemudian itu akan menambahkan properti baru yang disebut 'Aktif' dan nilai sampel untuk setiap objek di dalam objek ini. kode ini dapat diterapkan untuk larik objek dan objek objek.
Arash MAS
0

Dengan ES6 Anda cukup melakukan:

 for(const element of Results) {
      element.Active = "false";
 }
Salim Lyoussi
sumber