[解決済み】オブジェクトの配列のプロパティを合計するためにreduceを呼び出す方法は?
質問
合計したい
a.x
の各要素に対して
arr
.
arr = [ { x: 1 }, { x: 2 }, { x: 4 } ];
arr.reduce(function(a, b){ return a.x + b.x; }); // => NaN
私は、以下のように考えています。
a.x
は
undefined
を、ある時点で
以下は正常に動作します。
arr = [ 1, 2, 4 ];
arr.reduce(function(a, b){ return a + b; }); // => 7
最初の例では、何が間違っているのでしょうか?
解決方法は?
最初の反復の後、あなたは数値を返し、次にプロパティ
x
である次のオブジェクトに追加するために、このオブジェクトの
undefined
を含む数学
undefined
の結果は
NaN
.
を含むオブジェクトを返してみてください。
x
プロパティに、パラメータの x プロパティの合計を指定します。
var arr = [{x:1},{x:2},{x:4}];
arr.reduce(function (a, b) {
return {x: a.x + b.x}; // returns object with property x
})
// ES6
arr.reduce((a, b) => ({x: a.x + b.x}));
// -> {x: 7}
コメントより解説を追加しました。
の各反復の戻り値は
[].reduce
として使用されます。
a
を次の反復で使用します。
イテレーション1
a = {x:1}
,
b = {x:2}
,
{x: 3}
に割り当てられました。
a
繰り返し2回目
イテレーション2
a = {x:3}
,
b = {x:4}
.
この例の問題点は、数値リテラルを返していることです。
function (a, b) {
return a.x + b.x; // returns number literal
}
イテレーション1
a = {x:1}
,
b = {x:2}
,
// returns 3
として
a
次の繰り返しで
イテレーション2
a = 3
,
b = {x:2}
リターン
NaN
数値リテラル
3
というプロパティは(通常は)持っていません。
x
であるため
undefined
と
undefined + b.x
を返します。
NaN
と
NaN + <anything>
は常に
NaN
明確化 : 私はこのスレッドの他のトップアンサーよりも私の方法が好きです。なぜなら、マジックナンバーで還元するためにオプションのパラメータを渡して、数プリミティブを取り出す方がきれいだという考えに反対だからです。その結果、書く行数は減るかもしれませんが、読みやすさでは劣ると思います。
関連
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】配列に何かを追加する方法は?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】React-Routerの子が1つしかない。
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。