JavaScript中級

中級 JavaScriptで学ぶアルゴリズム|練習問題編

導入

現場でよく遭遇するのが、データの集約やフィルタリングの処理です。特に、複数の条件を満たすデータを効率的に抽出する必要がある場合、適切なアルゴリズムの選択が重要になります。この練習問題編では、JavaScriptを使って特定の条件に基づくデータ処理のアルゴリズムを学び、実務で役立つスキルを磨いていきます。

教科書レベルの解説(アルゴリズム)

重要な概念の整理

データのフィルタリングや集約は、ビジネスロジックの中心をなすことが多いです。例えば、ユーザーの行動データを分析する際、特定の条件を満たすユーザー群を抽出することが求められます。ここでのポイントは、条件をどのように効率的に設定し、データを操作するかです。一般的なループ処理や条件分岐を使うだけではなく、より効率的な方法を考えることが求められます。

コード例(JavaScript)


// ユーザーのデータをフィルタリングする関数
function filterUsers(users, criteria) {
    return users.filter(user => {
        return Object.keys(criteria).every(key => user[key] === criteria[key]);
    });
}

// サンプルデータ
const users = [
    { name: 'Alice', age: 25, country: 'USA' },
    { name: 'Bob', age: 30, country: 'Canada' },
    { name: 'Charlie', age: 35, country: 'USA' },
    { name: 'David', age: 25, country: 'Canada' }
];

// フィルタ条件
const criteria = { age: 25, country: 'USA' };

// フィルタリング実行
const filteredUsers = filterUsers(users, criteria);
console.log(filteredUsers);

コードの行ごとの解説

  1. function filterUsers(users, criteria) { – ユーザー配列とフィルタ条件を受け取る関数を定義。
  2. return users.filter(user => { – 配列のフィルタリングを開始。
  3. return Object.keys(criteria).every(key => user[key] === criteria[key]); – 各条件に対して、ユーザーがその条件を満たすかをチェック。
  4. const users = [...]; – サンプルデータを定義。
  5. const filteredUsers = filterUsers(users, criteria); – 定義した関数を呼び出し、フィルタリング結果を取得。

練習問題編

以下の練習問題に取り組んでみてください。各問題には模範解答と解説も用意しています。

  1. 問題1: 年齢が30歳以上のユーザーをフィルタリングする関数を作成してください。

    
    function filterByAge(users) {
        return users.filter(user => user.age >= 30);
    }
    
  2. 問題2: カナダに住むユーザーをフィルタリングする関数を作成してください。

    
    function filterByCountry(users) {
        return users.filter(user => user.country === 'Canada');
    }
    
  3. 問題3: 年齢が25歳以上かつアメリカに住むユーザーをフィルタリングする関数を作成してください。

    
    function filterByAgeAndCountry(users) {
        return users.filter(user => user.age >= 25 && user.country === 'USA');
    }
    
  4. 問題4: 年齢が30歳以下のユーザーの名前を取得する関数を作成してください。

    
    function getNamesUnder30(users) {
        return users.filter(user => user.age <= 30).map(user => user.name);
    }
    

まとめ

  • フィルタリング処理は、ビジネスロジックにおいて非常に重要な役割を果たす。
  • 条件に基づくデータ操作は、適切なアルゴリズムを選択することで効率化できる。
  • 練習問題を通じて、実務に即したスキルを身につけることができる。