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

2024-04-02

JavaScriptで複数の値を返す

オブジェクトを返す

最も一般的な方法は、オブジェクトを返すことです。オブジェクトはプロパティと値のペアの集合体であり、複数の値を格納するのに適しています。

function getPersonInfo() {
  return {
    name: "John Doe",
    age: 30,
    email: "[email protected]",
  };
}

const person = getPersonInfo();
console.log(person.name); // "John Doe"
console.log(person.age); // 30
console.log(person.email); // "[email protected]"

メリット:

  • 読みやすく、理解しやすい
  • 柔軟性があり、さまざまなデータ構造を格納できる
  • プロパティ名を知っている必要がある
  • 多くの場合、冗長なコードになる

配列を返す

配列は、値の順序付きリストであり、複数の値を返すもう 1 つの方法です。

function getNumbers() {
  return [1, 2, 3, 4, 5];
}

const numbers = getNumbers();
console.log(numbers[0]); // 1
console.log(numbers[1]); // 2
console.log(numbers[2]); // 3
console.log(numbers[3]); // 4
console.log(numbers[4]); // 5
  • シンプルで分かりやすい
  • 順序付きのデータ構造を格納するのに適している
  • 配列のインデックスを知っている必要がある
  • オブジェクトと比べて冗長になる場合がある

タプルを返す

タプルは、固定長の値のリストであり、TypeScriptなどの言語で使用できます。

function getCoordinates(): [number, number] {
  return [10.0, 20.0];
}

const coordinates = getCoordinates();
const x = coordinates[0]; // 10.0
const y = coordinates[1]; // 20.0
  • 型安全性がある
  • JavaScriptの標準機能ではない
  • TypeScriptなどの言語でのみ使用できる

Promiseを使用する

非同期処理の場合、Promiseを使用して複数の値を返すことができます。

function getData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({
        name: "John Doe",
        age: 30,
      });
    }, 1000);
  });
}

getData().then((data) => {
  console.log(data.name); // "John Doe"
  console.log(data.age); // 30
});
  • 非同期処理を簡単に扱える
  • 複数の値をまとめて返すことができる
  • 少し複雑なコードになる

Generatorを使用すると、複数の値をイテレータとして返すことができます。

function* getNumbers() {
  yield 1;
  yield 2;
  yield 3;
  yield 4;
  yield 5;
}

const numbers = getNumbers();
for (const number of numbers) {
  console.log(number);
}
  • イテレータを簡単に作成できる
  • 処理を分割して実行できる

JavaScriptで複数の値を返す方法はいくつかあります。それぞれの方法にはメリットとデメリットがあり、状況に応じて使い分けることが重要です。




オブジェクトを返す

function getPersonInfo() {
  return {
    name: "John Doe",
    age: 30,
    email: "[email protected]",
  };
}

const person = getPersonInfo();
console.log(person.name); // "John Doe"
console.log(person.age); // 30
console.log(person.email); // "[email protected]"

配列を返す

function getNumbers() {
  return [1, 2, 3, 4, 5];
}

const numbers = getNumbers();
console.log(numbers[0]); // 1
console.log(numbers[1]); // 2
console.log(numbers[2]); // 3
console.log(numbers[3]); // 4
console.log(numbers[4]); // 5

タプルを返す

function getCoordinates(): [number, number] {
  return [10.0, 20.0];
}

const coordinates = getCoordinates();
const x = coordinates[0]; // 10.0
const y = coordinates[1]; // 20.0

Promiseを使用する

function getData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({
        name: "John Doe",
        age: 30,
      });
    }, 1000);
  });
}

getData().then((data) => {
  console.log(data.name); // "John Doe"
  console.log(data.age); // 30
});

Generatorを使用する

function* getNumbers() {
  yield 1;
  yield 2;
  yield 3;
  yield 4;
  yield 5;
}

const numbers = getNumbers();
for (const number of numbers) {
  console.log(number);
}

実行方法

これらのコードは、ブラウザのコンソールまたはJavaScriptの開発環境で実行できます。

  • 各方法の詳細については、JavaScriptのドキュメントを参照してください。
  • 状況に応じて、最適な方法を選択してください。



JavaScriptで複数の値を返すその他の方法

デストラクチャリングを使用する

オブジェクトや配列を返す場合、デストラクチャリングを使用して、返された値を個々の変数に割り当てることができます。

function getPersonInfo() {
  return {
    name: "John Doe",
    age: 30,
    email: "[email protected]",
  };
}

const { name, age, email } = getPersonInfo();
console.log(name); // "John Doe"
console.log(age); // 30
console.log(email); // "[email protected]"

スプレッド構文を使用する

配列を返す場合、スプレッド構文を使用して、返された値を別の配列に追加することができます。

function getNumbers() {
  return [1, 2, 3, 4, 5];
}

const numbers = [0, ...getNumbers(), 6, 7, 8, 9];
console.log(numbers); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Symbolを使用して、独自のキーを作成し、オブジェクトのプロパティとして値を格納することができます。

const nameSymbol = Symbol("name");
const ageSymbol = Symbol("age");

function getPersonInfo() {
  return {
    [nameSymbol]: "John Doe",
    [ageSymbol]: 30,
  };
}

const person = getPersonInfo();
console.log(person[nameSymbol]); // "John Doe"
console.log(person[ageSymbol]); // 30

javascript return multiple-variable-return


【超便利】JavaScriptでカンマ区切り、ゼロパディング、桁数指定など、数値を思い通りに整形する方法

String. prototype. padStart()メソッドを使うpadStart()メソッドは、文字列を指定した長さまで左側へ空白で埋めてくれる便利なメソッドです。数字にゼロパディングを行う場合、以下の様に使用できます。この方法の利点は、シンプルで分かりやすいコードを書けることです。また、padStart()メソッドは、数字以外の文字列に対しても使用できます。...


JavaScriptのthisキーワード:使いこなしてコードをレベルアップ

1 関数呼び出し関数内で this を使用すると、その関数を呼び出したオブジェクトを参照します。例:2 オブジェクトリテラルオブジェクトリテラル内のメソッド内で this を使用すると、そのオブジェクト自身を参照します。3 コンストラクタコンストラクタ内で this を使用すると、生成されるオブジェクトを参照します。...


Fisher-YatesシャッフルアルゴリズムでJavaScript配列をシャッフルする

Fisher-Yatesシャッフルアルゴリズムは、最も一般的で効率的なシャッフルアルゴリズムの一つです。このアルゴリズムは、次の手順で実装できます。このアルゴリズムは、次のとおり動作します。currentIndex 変数に配列の長さを代入します。...


【初心者向け】Node.jsの非同期処理:setTimeout(fn, 0) vs setImmediate(fn) の違いを分かりやすく解説

Node. jsにおいて、非同期処理を扱う際に、setTimeoutとsetImmediateという2つの関数がよく用いられます。一見似た名前ですが、それぞれ異なる動作と用途を持っています。本記事では、setTimeout(fn, 0)とsetImmediate(fn)の具体的な違いを分かりやすく解説し、それぞれの適切な使い分けについて説明します。...


Vue.jsでエスケープされていないHTMLを安全に表示する方法

エスケープされていない HTML を表示する 2 つの主要な方法があります。v-html ディレクティブを使用するv-html ディレクティブを使用すると、HTML 文字列をエスケープせずにレンダリングできます。これは、次のようになります。...