でオブジェクトをマージオブジェクトを結果リストに追加し、それを現在のオブジェクトで上書きします。それ以外の場合は、両方のオブジェクトの値を合計します。最終的には、配列を減らして複製する必要はありません。私はその後、私は以前に書き、前のオブジェクトの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をオーバーライドする彼は最後のオブジェクトとids。
あなたが助けてくれてありがとう。私は実際に私の間違いが何であるか知りたかった。私はすでに私が間違っていたことを発見しました。論理エラーがあります。なぜなら、深いコピーをする代わりに私の最初のオブジェクトを参照するからです。そして、あなたのコードは、キーワードthisを使用することによってやや刺激的です。私はそれがjavascriptで、特にここでこれを使うのは良いことではないと思う。 :) – Rep
'私はそれがなぜjavascriptでこれを使うのは良くないと思う? –
あなたの例では "これ"は刺激的ですが、それはうまく動作しますが、私のポイントからは良いデザインではありません。 「これ」が実際に何であるかははっきりしない。だから、私にとって、他の多くの開発者は、 "this"が混乱することがある(オブジェクトスコープやオブジェクトの関数スコープの "this")ことがあり、一貫性のない動作をもたらすことに同意するでしょう。ここでコードを変更した方法は次のとおりです。[link](https://jsfiddle.net/pt8e6op6/) – Rep