0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TypeScript】入力値として配列や文字列が与えられた演習

Last updated at Posted at 2025-07-11

入力値としてnumber[]型のような配列やstring型が与えられた場合を想定した問題についていくつか紹介します。
解答例ですが、次の2つのパターンの解答を順に提示します。

  • for文とif文のみで構成された解答(use_for_if.tsx)
  • 配列のメソッドを用いた解答(use_arr_method.tsx)

問題:配列の要素を2倍(返り値は number[])

use_for_if.tsx
export const doubleElements = (arr: number[]): number[] => {
    const result: number[] = [];

    for (let i = 0; i < arr.length; i++) {
        result[i] = arr[i] * 2;
    }

    return result;
};

map関数を使うとより簡潔に書けます。

use_arr_method.tsx
export const doubleElements = (arr: number[]): number[] => {
    return arr.map(num => num * 2);
};

問題:配列の合計(返り値は number)

use_for_if.tsx
export const sumArray = (arr: number[]): number => {
    let sum = 0;
    for (let i = 0; i < arr.length; i++) {
        sum += arr[i];
    }
    return sum;
};

reduce関数を使うとより簡潔に書けます。
なお、reduce(減少する)と呼ばれるのは、「配列の要素すべてを集約して"1つの値"にまとめる」という意味とのことです。

use_arr_method.tsx
export const sumArray = (arr: number[]): number => {
    return arr.reduce((sum, num) => sum + num, 0);
};

問題:偶数のみを抽出(返り値は number[])

use_for_if.tsx
export const filterEven = (arr: number[]): number[] => {
    const result: number[] = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] % 2 === 0) {
            result[result.length] = arr[i]; // pushを使わずに代入
        }
    }
    return result;
};

filter関数を使うことでより簡潔に書けます。

use_arr_method.tsx
export const filterEven = (arr: number[]): number[] => {
    return arr.filter(num => num % 2 === 0);
};

問題:文字列の反転(string型を string に変更)

use_for_if.tsx
export const reverseString = (str: string): string => {
    let reversed = '';
    for (let i = str.length - 1; i >= 0; i--) {
        reversed += str[i];
    }
    return reversed;
};

補足ですが、TypeScriptにおいてstring型は配列のように扱えるオブジェクトとのことです。

splitメソッドとreverseメソッド、joinメソッドを組み合わせることでより簡潔に記述できます。

use_arr_method.tsx
export const reverseString = (str: string): string => {
    return str.split('').reverse().join('');
};

変換過程は以下のイメージです。

"hello"  // str
 ["h", "e", "l", "l", "o"]  // str.split('')
 ["o", "l", "l", "e", "h"]  // str.split('').reverse()
 "olleh"  // str.split('').reverse().join('')

問題:最大値の取得(返り値は number)

use_for_if.tsx
export const getMax = (arr: number[]): number => {
    if (arr.length === 0) throw new Error("Empty array");
    let max = arr[0];
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
};
use_arr_method.tsx
export const getMax = (arr: number[]): number => {
    return Math.max(...arr);
};

問題:母音のカウント(arr の型を string に変更、返り値は number)

use_for_if.tsx
export const countVowels = (str: string): number => {
    const vowels = ['a', 'i', 'u', 'e', 'o'];
    let count = 0;
    for (let i = 0; i < str.length; i++) {
        const c = str[i].toLowerCase();
        for (let j = 0; j < vowels.length; j++) {
            if (c === vowels[j]) {
                count++;
                break;
            }
        }
    }
    return count;
};
use_arr_method.tsx
export const countVowels = (str: string): number => {
    const vowels = ['a', 'i', 'u', 'e', 'o'];
    return str
        .toLowerCase()
        .split('')
        .filter(char => vowels.includes(char)).length;
};

問題:奇数だけを取り出す

use_for_if.tsx
export const filterOddNumbers = (arr: number[]): number[] => {
    const result: number[] = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] % 2 !== 0) {
            result[result.length] = arr[i]; // push 代替
        }
    }
    return result;
};
use_arr_method.tsx
export const filterOddNumbers = (arr: number[]): number[] => {
    return arr.filter(num => num % 2 !== 0);
};

問題:すべての要素を3乗にする

use_for_if.tsx
export const cubeElements = (arr: number[]): number[] => {
    const result: number[] = [];
    for (let i = 0; i < arr.length; i++) {
        result[result.length] = arr[i] * arr[i] * arr[i]; // 三乗
    }
    return result;
};
use_arr_method.tsx
export const cubeElements = (arr: number[]): number[] => {
    return arr.map(num => num * num * num);
};

問題:偶数の個数を数える

use_for_if.tsx
export const countEvenNumbers = (arr: number[]): number => {
    let count = 0;
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] % 2 === 0) {
            count++;
        }
    }
    return count;
};
use_arr_method.tsx
export const countEvenNumbers = (arr: number[]): number => {
    return arr.reduce((count, num) => {
        return num % 2 === 0 ? count + 1 : count;
    }, 0);
};

問題:特定の文字の出現回数を数える(大文字小文字を区別しない)

use_for_if.tsx
export const countCharOccurrences = (str: string, target: string): number => {
    let count = 0;
    const lowerStr = str.toLowerCase();
    const lowerTarget = target.toLowerCase();

    for (let i = 0; i < lowerStr.length; i++) {
        if (lowerStr[i] === lowerTarget) {
            count++;
        }
    }
    return count;
};
use_arr_method.tsx
export const countCharOccurrences = (str: string, target: string): number => {
    const lowerTarget = target.toLowerCase();
    return str
        .toLowerCase()
        .split('')
        .filter(c => c === lowerTarget)
        .length;
};

問題:配列を逆順に並べる

use_for_if.tsx
export const reverseArray = (arr: number[]): number[] => {
    const result: number[] = [];
    for (let i = arr.length - 1; i >= 0; i--) {
        result[result.length] = arr[i];
    }
    return result;
};
use_arr_method.tsx
export const reverseArray = (arr: number[]): number[] => {
    return arr.slice().reverse(); // 元の配列を変更しない
};

問題:数値を要素に持つ配列を昇順に並び替える(いわゆるバブルソート)

use_for_if.tsx
function bubbleSortAscending(nums: number[]): number[] {
  const arr = nums.slice(); // 元配列を壊さないようコピー

  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        const temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }

  return arr;
}
use_arr_method.tsx
function sortNumericAscending(nums: number[]): number[] {
  return nums.slice().sort((a, b) => a - b);
}

補足:
.sort((a, b) => a - b)のa, bはそれぞれ、各要素の前後を表しています。a-b > 0だった場合(前方の数値の方が大きかった場合)、aとbが入れ替わり大きい方の値が後方に移動します。
なお、.sort()と書いた場合は、文字列として昇順に並び替えられます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?