2017-09-13 91 views
-2
 var routePlan = [ 
     { 
     "id" : 1, 
     "farmerName" : "Farmer1", 
     "farmerId" : 1 
     }, 
     { 
     "id" : 2, 
     "farmerName" : "Farmer2", 
     "farmerId" : 2 
     }, 
     { 
     "id" : 1, 
     "farmerName" : "Farmer3", 
     "farmerId" : 3 
     } 
    ]; 

我要合併具有相同ID對象和使用JavaScript創建一個新的合併對象或angularjs如何根據ID和組相同的鍵值對合並兩個對象

 var routePlan = [ 
     { 
     "id" : 1, 
     "farmers" : [ 
      { 
      "farmerName" : "Farmer1", 
      "farmerId" : 1 
      }, 
      { 
      "farmerName" : "Farmer3", 
      "farmerId" : 3 
      } 
     ] 
     }, 
     { 
     "id" : 2, 
     "farmerName" : "Farmer3", 
     "farmerId" : 2 
     } 
    ]; 

請幫助我,我已經看到很多的例子在網絡上,但似乎沒有符合我的要求

+0

我投票,因爲這個問題沒有顯示出的努力跡象關閉這個問題作爲題外話。這是一項要求,而不是一個問題陳述。 – Rajesh

+0

您的數據結構應該一致。這是決定一個'ID'是否可以有多個條目 - 看起來你已經決定了。所以,即使沒有條目,單個條目或多個條目,「農民」也應該始終是一個陣列。這將爲您節省大量頭痛。 – Tigger

+0

我知道它的一個要求,但我已經使用已經回答的問題的代碼嘗試了很多東西,似乎沒有任何工作,我不知道如何顯示我的努力在stackoverflow,我不是一個JavaScript的專家,我需要幫助或只是指導 – user3327684

回答

0

它一定能得到改善,但是這是一個有效的解決方案:

let temp = routePlan.reduce(function(acc, item){ 
    acc[item.id] = acc[item.id] || []; 
    acc[item.id].push({ "farmerName": item.farmerName, "farmerId" : item.farmerId }); 
    return acc; 
}, {}); 

let newRoute = Object.keys(temp).map(function(key){ 
    let newObj = {} 

    if (temp[key].length > 1){ 
     newObj.id = parseInt(key); 
     newObj.farmers = temp[key]; 
    } 
    else 
    { 
     newObj = Object.assign({}, routePlan.find(elem => elem.id == key)); 
    } 

    return newObj; 
}); 

請注意reduce函數用於將您的對象分組id

+0

感謝Marco,很有幫助 – user3327684

0

你可以拿一個散列表作爲組的參考。

var data = [{ id: 1, farmerName: "Farmer1", farmerId: 1 }, { id: 2, farmerName: "Farmer2", farmerId: 2 }, { id: 1, farmerName: "Farmer3", farmerId: 3 }], 
 
    hash = Object.create(null), 
 
    grouped = data.reduce(function (r, a) { 
 
     function getP(o) { 
 
      return ['farmerName', 'farmerId'].reduce(function (r, k) { 
 
       r[k] = o[k]; 
 
       return r; 
 
      }, {}); 
 
     } 
 
     if (!(a.id in hash)) { 
 
      hash[a.id] = r.push(a) - 1; 
 
      return r; 
 
     } 
 
     if (!r[hash[a.id]].farmers) { 
 
      r[hash[a.id]] = { id: a.id, farmers: [getP(r[hash[a.id]])] }; 
 
     } 
 
     r[hash[a.id]].farmers.push(getP(a)); 
 
     return r 
 
    }, []); 
 

 
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

相關問題