1. 3 件の閲覧数を集計する
  2. 1 件だけなら合計と平均が同じになる
  3. 空配列は 0 と 0
  4. 平均が小数になる場合は四捨五入する
  5. すべて 0 でも NaN にしない
コース一覧
JavaScript基礎文法:処理を組み立てる
オブジェクトで複数の値を返す

JavaScript基礎文法:処理を組み立てる

if・switch による条件分岐、配列とループ、関数とコールバック、オブジェクトを順に組み立てる全 33 レッスン(525 分)の基礎文法コースです。FizzBuzz、作品リスト、関数への整理、作品データの構造化を通して、入力から結果を返す処理を自分で分解して書きます。DOM 操作は次のコースで扱います。

1
条件分岐
01. if 文の基本15分
02. if / else if / else で段階判定15分
03. switch 文で値を一覧から選ぶ15分
04. 条件を組み合わせる20分
05. FizzBuzz で複数条件を組み立てる20分
06. つくる 時間帯で挨拶を変える20分
07. 第1章まとめクイズ10分
2
配列とループ
01. 配列のきほん15分
02. 要素を足す・取り除く15分
03. for ループで合計を求める15分
04. for-of で配列を走査する15分
05. while で条件を満たす間くり返す15分
06. break と continue でループを制御する15分
07. つくる 作品リストを一覧にする20分
08. 第2章まとめクイズ10分
3
関数
01. 関数宣言15分
02. アロー関数15分
03. デフォルト引数15分
04. 早期 return でネストを浅くする15分
05. 変数のスコープ15分
06. コールバック関数15分
07. forEach で配列をまわす15分
08. つくる 処理を関数に整理する20分
09. 第3章まとめクイズ10分
4
オブジェクト
01. オブジェクトのきほん18分
02. オブジェクトで複数の値を返す16分
03. const と参照18分
04. ?. で安全に取り出す16分
05. 分割代入18分
06. スプレッド構文18分
07. find と includes で探す16分
08. つくる 作品データを構造化する25分
09. 第4章まとめクイズ10分

オブジェクトで複数の値を返す

2つの値をまとめて返す
解説

このレッスンで分かること

  • return は値を 1 つしか返せないので、関連する値はオブジェクトに詰めて返します
  • 呼び出し側は名前で受け取れるので、順番を覚えずに済みます

合計と平均を、両方返したい

集計を書くと、すぐこの壁にぶつかります。合計も平均も欲しいのに、return sum, avg; とは書けません。JavaScript の return が返せる値は 1 つだけだからです。関数を 2 本に分ければ書けますが、同じループを 2 回まわすことになります。

前のレッスンでオブジェクトを覚えたので、ようやく答えが出せます。複数の値は 1 つの箱に詰めて返す、それだけです。

JavaScript

function measureBio(text) { return { length: text.length, isEmpty: text.length === 0 }; } const result = measureBio("フロントエンド"); console.log(result.length); // 7 console.log(result.isEmpty); // false

呼び出し側は result.length のように名前で読めます。名前で受け取れることの本当の利点は、後から値を増やしても壊れないことです。キーを 1 つ足しても、既存の呼び出し側は今までどおりのキーを読み続けられます。

返し方呼び出し側向いている場面
オブジェクトr.length意味の違う値が並ぶとき
配列const [min, max] = r順番が自明な 2 値のとき
文字列に連結自分で分解する表示専用のとき以外は避ける

変数名とキー名がそろっているときは、片方を省略できます。第3章で一度出てきた省略記法です。

JavaScript

const width = 320; const height = 180; console.log({ width, height }); // { width: 320, height: 180 }

0 件のときに NaN が出る

集計関数を書くときに必ず考えるのが、空の配列を渡された場合です。

JavaScript

const scores = []; let sum = 0; console.log(sum / scores.length); // NaN 0 割る 0 の結果

要素が 0 個なら 0 / 0 の計算になり、結果は NaN になります。NaN は数値のようで数値ではない厄介な値で、一度混ざると、その後どれだけ計算しても NaN のままです。画面には「NaN 回」という意味不明な表示が出ます。

第3章の三項演算子で、0 件のときの答えを先に決めておけば防げます。「まだ作品が 1 件も無い状態」は、プロフィールサイトを公開した初日に必ず訪れる状態です。

小数を整数に丸めるには Math.round を使います。四捨五入なので、.5 は大きいほうへ寄ります。

JavaScript

console.log(Math.round(12.5)); // 13 console.log(Math.round(8.4)); // 8

よくある間違い

  • return の直後で改行する — return だけの行があると、JavaScript は行末にセミコロンを補い、そこで文が終わったと解釈します。戻り値が undefined になるので、return { は必ず同じ行に書きます
  • キー名を呼び出し側と食い違わせる — キー名は関数の外向きの約束です。つづりが違っても undefined が返るだけでエラーにならないので、気付くのが遅れます

要件

  1. 関数名は summarizeViews、引数は数値の配列 views の 1 つ
  2. 戻り値は total と average の 2 つのキーを持つオブジェクト
  3. average は Math.round で四捨五入した整数にすること
  4. 空配列のときは { total: 0, average: 0 } を返すこと

入出力例

summarizeViews([120,80,40]) → {"average":80,"total":240} summarizeViews([100]) → {"average":100,"total":100} summarizeViews([]) → {"average":0,"total":0} summarizeViews([10,15]) → {"average":13,"total":25} summarizeViews([0,0,0]) → {"average":0,"total":0}

ヒント

まず `let total = 0;` を用意して、`for-of` で 1 つずつ足し上げます

平均は `Math.round(total / views.length)` で求められます

空配列だと `views.length` が `0` になり、`0 / 0` は `NaN` です。割る前に件数を確認してください

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • const と参照

    const が禁止しているのは再代入だけです。配列やオブジェクトの中身は変更できる理由を参照の仕組みから理解します。

  • ?. で安全に取り出す

    オプショナルチェーンは入れ子のオブジェクトを安全にたどる記号です。途中が無くてもエラーにならず undefined になります。

  • 分割代入

    オブジェクトや配列から必要な値をまとめて変数に取り出す書き方です。既定値や名前の付け替えもできます。

  • スプレッド構文

    ... で配列やオブジェクトの中身を展開する書き方です。元を壊さずにコピーや合成ができます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 関連クラス間のつながりを表す直線
  • オブジェクトキーと値のペアで構造を作るデータ
  • JavaScriptWeb で動的な振る舞いを担う言語
  • 関数処理に名前を付けて再利用できる単位
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • 配列サイズ固定の同型データの集まり
  • 変数データに名前をつけて参照する仕組み
  • 三項演算子値1 if 条件 else 値2 の形式。
main.js
学習モード
エディタを読み込んでいます

メモ

オブジェクトで複数の値を返す

⌘S で保存