Nesne dizisine özellik ekleme


103

Aşağıda gösterildiği gibi bir dizi nesnem var

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

Bu Nesneler dizisinin her öğesine Active adlı bir özellik daha eklemek istiyorum.

Nihai sonuç aşağıdaki gibi olmalıdır.

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"

Birisi bunu nasıl başaracağımı bana bildirebilir mi?


6
Dizi boyunca döngü yapın. Döngü sırasında her dizi öğesine özellikler ekleyin. Hangi bölümü nasıl yapacağını bilmiyorsun?
JJJ

Yanıtlar:


147

forEachDizideki her öğe için sağlanan işlevi bir kez yürütmek için yöntemi kullanabilirsiniz . Sağlanan bu işlevde, Activeözelliği öğeye ekleyebilirsiniz .

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

204

ya da kullan map

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

Orijinali değiştirmemek ve her biri için yeni bir nesne döndürmek için @adrianolsk tarafından yapılan yorumu yansıtacak şekilde düzenlendi.

Spesifikasyonu okuyun


4
yalnızca ES6'da desteklenir
Amaynut

5
ES5 kesin;) - ama babel mutlu bir şekilde derlemeyi
çözecek

50
harita, nesneyi değiştirmeyen yeni bir dizi döndürmelidir, bu durumda forEach daha iyi olur veya haritayı kullanır ve yeni bir nesne döndürürResults.map(obj=> ({ ...obj, Active : 'false' }))
adrianolsk

4
Harika çözüm @adrianolsk, bunu ayrı bir cevap olarak sunmalısınız.
Michael Hays


1

Ben de bu sorunla karşılaştım ve çözmeye çalışırken uygulamamı çalıştıran krom sekmesini çökmeye devam ettim. Görünüşe göre nesneler için yayılma operatörü suçluydu.

Adrianolsk'un yorumundan ve sidonaldson'ın yukarıdaki cevabından biraz yardım alarak, babel'deki spread operatörünün çıktısını Object.assign () kullandım, şöyle :

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

0

Bir anahtar-değer yapısı olarak nesneden geçer. Ardından, bu nesnenin içindeki her bir nesneye 'Etkin' adlı yeni bir özellik ve bu özellik için bir örnek değer ('Etkin) ekleyecektir. bu kod hem nesneler dizisi hem de nesneler için uygulanabilir.

   Object.keys(Results).forEach(function (key){
            Object.defineProperty(Results[key], "Active", { value: "the appropriate value"});
        });

Evet tabi, anahtar-değer yapısı olarak nesneden geçer. Ardından, bu nesnenin içindeki her bir nesneye 'Aktif' adlı yeni bir özellik ve bir örnek değer ekleyecektir. bu kod hem nesneler dizisi hem de nesneler için uygulanabilir.
Arash MAS

0

ES6 ile şunları yapabilirsiniz:

 for(const element of Results) {
      element.Active = "false";
 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.