我想通過比較數組中的前一個和當前對象來減少我的對象數組,如果先前對象的ID與當前對象不同,那麼我將前一個對象對象到我的結果列表並用當前對象覆蓋它,否則我將兩個對象的值相加。最後它應該是一個縮小的數組,不能重複。合併具有相同ID但對象總值的對象
我的數據是這樣的:
[{
Clicks: 210,
Company: "A",
_id: { CompanyID: 5 }
},
{
Clicks: 35,
Company: "C",
_id: { CompanyID: 3 }
},
{
Clicks: 15,
Company: "B",
_id: { CompanyID: 2 }
},
{
Clicks: 13,
Company: "A",
_id: { CompanyID: 5 }
}]
並希望將其減少到這種形式:
[{
Clicks: 223,
Company: "A",
_id: { CompanyID: 5 }
},
{
Clicks: 35,
Company: "C",
_id: { CompanyID: 3 }
},
{
Clicks: 15,
Company: "B",
_id: { CompanyID: 2 }
}]
這是我的工作不正常的解決方案迄今:
$scope.reduce = function() {
var result = [];
var prev = null;
angular.forEach($scope.data, function (value, key) {
if (prev != null) {
if (prev._id.CompanyID != value._id.CompanyID) {
result.push(prev);
prev = value;
} else {
prev.Clicks += value.Clicks;
}
} else {
prev = value;
}
});
}
我的結果看起來不錯,它減少了所有重複項,但它不會將具有相同ID的對象的值相加,只是覆蓋了t他與最後一個對象一起致敬。
感謝您幫助。我其實想知道我的錯誤是什麼。我已經發現我做錯了,我有邏輯錯誤,因爲我參考了我的第一個對象,而不是做一個深層複製。而使用關鍵字this,你的代碼有點讓人惱火。我認爲在javascript中使用它並不好,特別是在這裏。 :) – Rep
'我認爲這是不好的使用JavaScript'這是爲什麼? –
在你的例子中,「this」令人討厭,但它工作正常,但從我的角度來看並不是一個好設計。目前尚不清楚「實際」是什麼。因此,對於我和許多其他開發人員會同意「this」可能會造成混淆(對象範圍或對象的功能範圍中的「this」)並導致不一致的行爲。這裏是我如何改變你的代碼:[link](https://jsfiddle.net/pt8e6op6/) – Rep