情報系学生の就職活動完全攻略マニュアル!
progmraming
未経験からのプログラミング上達ガイド
配列は順序付けられたデータの集合で、各要素にインデックス(0から始まる番号)でアクセスできます。
// 配列の作成方法
const fruits = ['りんご', 'バナナ', 'みかん'];
const numbers = [1, 2, 3, 4, 5];
const mixed = [1, 'hello', true, {name: 'Alice'}];
// インデックスでのアクセス
console.log(fruits[0]); // 'りんご'
console.log(fruits[1]); // 'バナナ'
const fruits = ['りんご', 'バナナ'];
// 末尾に追加:push()
fruits.push('みかん');
console.log(fruits); // ['りんご', 'バナナ', 'みかん']
// 先頭に追加:unshift()
fruits.unshift('いちご');
console.log(fruits); // ['いちご', 'りんご', 'バナナ', 'みかん']
// 末尾から削除:pop()
const lastFruit = fruits.pop();
console.log(fruits); // ['いちご', 'りんご', 'バナナ']
// 先頭から削除:shift()
const firstFruit = fruits.shift();
console.log(fruits); // ['りんご', 'バナナ']
// 配列の結合:concat()
const fruits1 = ['りんご', 'バナナ'];
const fruits2 = ['みかん', 'ぶどう'];
const allFruits = fruits1.concat(fruits2);
console.log(allFruits); // ['りんご', 'バナナ', 'みかん', 'ぶどう']
// スプレッド演算子を使った結合(ES6+)
const combined = [...fruits1, ...fruits2];
// 配列の一部を抽出:slice()
const selection = allFruits.slice(1, 3);
console.log(selection); // ['バナナ', 'みかん']
// 要素の追加・削除・置換:splice()
const fruits = ['りんご', 'バナナ', 'みかん'];
fruits.splice(1, 1, 'いちご'); // 1番目を削除して'いちご'を挿入
console.log(fruits); // ['りんご', 'いちご', 'みかん']
// 各要素を変換
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
// オブジェクトの配列変換
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 35 }
];
const userNames = users.map(user => user.name);
console.log(userNames); // ['Alice', 'Bob', 'Charlie']
// 条件に合う要素を抽出
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const evenNumbers = numbers.filter(n => n % 2 === 0);
console.log(evenNumbers); // [2, 4, 6, 8, 10]
// オブジェクトの配列フィルタリング
const products = [
{ name: 'ノートPC', price: 80000 },
{ name: 'マウス', price: 3000 },
{ name: 'キーボード', price: 5000 }
];
const affordableProducts = products.filter(p => p.price <= 5000);
// 配列の要素を1つの値に集約
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15
// 複雑な集約処理
const orders = [
{ product: 'Laptop', quantity: 2, price: 1000 },
{ product: 'Mouse', quantity: 5, price: 30 },
{ product: 'Keyboard', quantity: 3, price: 50 }
];
const totalAmount = orders.reduce((total, order) =>
total + (order.quantity * order.price), 0
);
console.log(totalAmount); // 2300
const fruits = ['りんご', 'バナナ', 'みかん', 'りんご'];
// 要素の存在確認:includes()
console.log(fruits.includes('バナナ')); // true
// 要素の位置検索:indexOf()
console.log(fruits.indexOf('りんご')); // 0(最初の位置)
// 最後の位置検索:lastIndexOf()
console.log(fruits.lastIndexOf('りんご')); // 3
// 条件に合う要素の検索:find()
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
const user = users.find(u => u.id === 2);
console.log(user); // { id: 2, name: 'Bob' }
const fruits = ['りんご', 'バナナ', 'みかん'];
// 各要素に対して処理を実行
fruits.forEach((fruit, index) => {
console.log(`${index}: ${fruit}`);
});
const ages = [25, 30, 35, 40];
// 全要素が条件を満たすか:every()
const allAdults = ages.every(age => age >= 20);
console.log(allAdults); // true
// いずれかの要素が条件を満たすか:some()
const hasSenior = ages.some(age => age >= 65);
console.log(hasSenior); // false
// 数値配列のソート
const numbers = [3, 1, 4, 1, 5, 9, 2, 6];
numbers.sort((a, b) => a - b); // 昇順
console.log(numbers); // [1, 1, 2, 3, 4, 5, 6, 9]
// 文字列配列のソート
const names = ['Charlie', 'Alice', 'Bob'];
names.sort();
console.log(names); // ['Alice', 'Bob', 'Charlie']
// オブジェクト配列のソート
const students = [
{ name: 'Alice', score: 85 },
{ name: 'Bob', score: 92 },
{ name: 'Charlie', score: 78 }
];
students.sort((a, b) => b.score - a.score); // スコア降順
const sortedNumbers = [...numbers].sort((a, b) => a - b);
メソッドチェーンを使うと、複数の操作を連続して実行できます:
const products = [
{ name: 'Laptop', price: 80000, category: 'electronics' },
{ name: 'Mouse', price: 3000, category: 'electronics' },
{ name: 'Shirt', price: 5000, category: 'clothing' },
{ name: 'Phone', price: 60000, category: 'electronics' }
];
// 電化製品の平均価格を計算
const averageElectronicsPrice = products
.filter(p => p.category === 'electronics')
.map(p => p.price)
.reduce((sum, price, _, arr) => sum + price / arr.length, 0);
console.log(averageElectronicsPrice); // 47666.67
// 重複を除去
const numbers = [1, 2, 2, 3, 4, 4, 5];
const uniqueNumbers = [...new Set(numbers)];
console.log(uniqueNumbers); // [1, 2, 3, 4, 5]
// オブジェクトの配列で重複除去
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }
];
const uniqueUsers = users.filter((user, index, self) =>
index === self.findIndex(u => u.id === user.id)
);
// グループ化
const products = [
{ name: 'Laptop', category: 'electronics' },
{ name: 'Mouse', category: 'electronics' },
{ name: 'Shirt', category: 'clothing' },
{ name: 'Phone', category: 'electronics' }
];
const groupedByCategory = products.reduce((groups, product) => {
const category = product.category;
if (!groups[category]) {
groups[category] = [];
}
groups[category].push(product);
return groups;
}, {});
console.log(groupedByCategory);
// {
// electronics: [...],
// clothing: [...]
// }
// 2次元配列の作成
const matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
// 配列フラット化:flat()
const flattened = matrix.flat();
console.log(flattened); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
// 深いネスト配列のフラット化:flat(depth)
const deepNested = [1, [2, [3, [4]]]];
const deepFlattened = deepNested.flat(3);
console.log(deepFlattened); // [1, 2, 3, 4]
// 要素の検索
// ❌ 非効率な方法
const hasBanana = fruits.filter(f => f === 'バナナ').length > 0;
// ✅ 効率的な方法
const hasBanana2 = fruits.includes('バナナ');
// 最初の要素の取得
// ❌ 非効率な方法
const firstUser = users.filter(u => u.role === 'admin')[0];
// ✅ 効率的な方法
const firstUser2 = users.find(u => u.role === 'admin');
以下の問題に挑戦してみましょう:
問題1: ユーザーデータから、年齢が30歳以上のユーザーの名前を抽出し、アルファベット順にソートしてください。
問題2: 注文データから、カテゴリごとの売上合計を算出してください。
問題3: 2つの配列の共通要素を見つけ、新しい配列として返してください。
// 問題1の解答
const users = [
{ name: 'Charlie', age: 25 },
{ name: 'Alice', age: 35 },
{ name: 'Bob', age: 30 },
{ name: 'David', age: 28 }
];
const adultNames = users
.filter(user => user.age >= 30)
.map(user => user.name)
.sort();
console.log(adultNames); // ['Alice', 'Bob']
// 問題2の解答
const orders = [
{ category: 'electronics', amount: 1000 },
{ category: 'clothing', amount: 500 },
{ category: 'electronics', amount: 1500 },
{ category: 'food', amount: 300 }
];
const salesByCategory = orders.reduce((sales, order) => {
sales[order.category] = (sales[order.category] || 0) + order.amount;
return sales;
}, {});
console.log(salesByCategory);
// 問題3の解答
const array1 = [1, 2, 3, 4, 5];
const array2 = [4, 5, 6, 7, 8];
const commonElements = array1.filter(item => array2.includes(item));
console.log(commonElements); // [4, 5]
配列操作をマスターすることで、データ処理が劇的に効率化されます。特に以下のポイントは重要です:
Vol.5では「関数の使い方をマスターしよう」をテーマに、関数宣言から高度なテクニックまでを詳しく解説します。お楽しみに! 🚀