2016-04-12 42 views
-3

Eh, aynı ada sahip ürün fiyatlarını eklemem ve diziyi buna göre değiştirmem gerekiyor.Aynı adla ürün kayıtlarının bir nesnenin nesnesi içine eklenmesi

Girdi: records=[{'name':'A', 'price':200},{'name':'B', 'price':350},{'name':'A', 'price':150},{'name':'B', 'price':300}]

Çıktı: çözüm javascript forEach fonksiyonu kullanılarak sağlanırsa records=[{'name':'A', 'price':350},{'name':'B', 'price':650}]

memnun olacak.

+3

yapmanın bir başka yolu! :) –

+0

sadece bu veriyi dizide itme özelliğini kullanacağım urs amacına hizmet edeceğini düşünüyorum –

+0

Array yöntemini öğrenmelisiniz. ('forEach' ve 'push') https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https://developer.mozilla.org/ tr/docs/Web/JavaScript/Referans/Global_Objects/Array/push ;-) – superui

cevap

1

İstenen nesnelerle yeni bir dizi oluşturabilir ve fiyatı bu nesneden bir referansla gruplandırılmış öğeye ekleyebilirsiniz.

var records = [{ 'name': 'A', 'price': 200 }, { 'name': 'B', 'price': 350 }, { 'name': 'A', 'price': 150 }, { 'name': 'B', 'price': 300 }], 
 
    result = []; 
 

 
records.forEach(function (a) { 
 
    if (!this[a.name]) { 
 
     this[a.name] = { name: a.name, price: 0 }; 
 
     result.push(this[a.name]); 
 
    } 
 
    this[a.name].price += a.price; 
 
}, {}); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

+0

Teşekkürler! Mükemmel çalışıyor! –

0

ödevini kendin yapmalıyım o

records.map(function(element, index, array){ 
    return { 
     name: element.name, 
     price: (array 
      .reduceRight(function(previousvalue, currentvalue, currentindex){ 
       var dup = currentvalue.name === element.name; 
       var cp = dup? currentvalue.price: 0; 
       dup? array.splice(currentindex, 1):0; 
       return previousvalue + cp; 
      }, 0))} 
}).filter(function(element){ return typeof element !== "undefined";}); 

fiddle https://jsfiddle.net/sfy2p1rf/1/

+0

Üzgünüm, çalışmıyor. Sonuç olarak sadece bir kayıt gösterir. –

+0

Evet öyle. Bir keman ekledim –