2017-07-17 46 views
-4

我想補充propertyA如果對象propertyB匹配添加propertyA如果對象propertyB匹配

以前

usa = [{fifa:"1", year:2000},{fifa:"3", year:2000},{fifa:"5", year:2010},{fifa:"2", year:2000},{fifa:"4", year:2010}]; 

usa = [{fifa:"6", year:2000},{fifa:"9", year:2010}]; 

回答

3

這是一個解決方案之後。不是很優雅,但它的工作原理:

usa.reduce((acc, current) => { 
    const f = acc.find(c => c.year == current.year) 

    if (f) { 
    f.fifa = parseInt(f.fifa, 10) + parseInt(current.fifa, 10) 
    } else { 
    acc.push({ 
     year: current.year, 
     fifa: parseInt(current.fifa, 10).toString() 
    }) 
    } 
    return acc 

}, []) 
+0

爲什麼這不優雅? – evolutionxbox

+0

我不喜歡'if'和多個'parseInt'。 :-) – ema

0

您可以驗證您的數組的值與usa[index].fifa == "2"usa[index].year == 2000,如果它有一定的價值相匹配,通過push()方法

if (usa[index].year == 2000) { 
    usa.push({fifa: "32", year: 2001}) 
} 
1

嘗試添加屬性這個:

 function add_propertyA_if_propertyB(array) 
     { 
      var arrayTmp = new Array(); 
      var arrayYears = new Array(); 
      for(int i=0;i<array.length;i++) 
      { 
       if(!arrayTmp[array[i].year]){ 
       arrayTmp[array[i].year] = array[i].fifa; 
       arrayYears.push(array[i].year); 
      } 
       else 
       arrayTmp[array[i].year] += array[i].fifa; 
      } 
      var arrayResult = new Array(); 
      for(int i=0;i<arrayYears.length;i++) 
      { 
       arrayResult.push(new {year:arrayYears[i], fifa:arrayTmp[arrayYears[i]]}); 
      } 
      return arrayResult; 
     }