高校倫理1433840 views
LaTeX957673 views
中学英語809046 views
中学理科1626729 views
世界の国560930 views
英語608453 views
MathPython492025 views
高校国語785873 views
小学社会308762 views
りんご194232 views
Help
Tools

English

JSON データのソート

API から取得した JSON データを並び替える方法を解説します。配列の sort() メソッドを使いこなすことで、様々な条件でデータをソートできるようになります。

sort() の基本

sort() メソッドは配列を直接変更(破壊的操作)します。元の配列を保持したい場合は、先にコピーを作成してください。

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 original = [3, 1, 4, 1, 5];
const sorted = [...original].sort((a, b) => a - b);

数値でソート

比較関数を渡して、数値の大小を比較します。

const users = [
  { name: "田中", age: 25 },
  { name: "山田", age: 30 },
  { name: "佐藤", age: 22 }
];

// 年齢で昇順(小さい順)
const byAgeAsc = [...users].sort((a, b) => a.age - b.age);

// 年齢で降順(大きい順)
const byAgeDesc = [...users].sort((a, b) => b.age - a.age);
昇順(a - b)

a が小さい場合に負の値を返し、a を前に配置

降順(b - a)

a が大きい場合に負の値を返し、a を前に配置

文字列でソート

文字列の比較には localeCompare() を使用します。これにより、日本語も正しくソートできます。

const users = [
  { name: "山田" },
  { name: "田中" },
  { name: "佐藤" }
];

// 名前で昇順
const byNameAsc = [...users].sort((a, b) => 
  a.name.localeCompare(b.name, "ja")
);

// 名前で降順
const byNameDesc = [...users].sort((a, b) => 
  b.name.localeCompare(a.name, "ja")
);

日付でソート

日付文字列は Date オブジェクトに変換するか、ISO 形式であればそのまま比較できます。

const posts = [
  { title: "記事A", date: "2024-03-15" },
  { title: "記事B", date: "2024-01-20" },
  { title: "記事C", date: "2024-02-10" }
];

// 日付で昇順(古い順)
const oldest = [...posts].sort((a, b) => 
  new Date(a.date) - new Date(b.date)
);

// 日付で降順(新しい順)
const newest = [...posts].sort((a, b) => 
  new Date(b.date) - new Date(a.date)
);

ISO 形式(YYYY-MM-DD)の場合は文字列比較でも正しくソートできます。

const newest = [...posts].sort((a, b) => b.date.localeCompare(a.date));

複数条件でソート

第一条件が同じ場合に第二条件で並び替える方法です。

const users = [
  { name: "田中", age: 25, score: 80 },
  { name: "山田", age: 25, score: 90 },
  { name: "佐藤", age: 30, score: 85 }
];

// 年齢で昇順、同じ年齢ならスコアで降順
const sorted = [...users].sort((a, b) => {
  if (a.age !== b.age) {
    return a.age - b.age;
  }
  return b.score - a.score;
});

汎用的なソート関数

ソート条件を引数で受け取る汎用関数を作ると便利です。

function sortBy(array, key, order = "asc") {
  const multiplier = order === "desc" ? -1 : 1;
  
  return [...array].sort((a, b) => {
    if (a[key] < b[key]) return -1 * multiplier;
    if (a[key] > b[key]) return 1 * multiplier;
    return 0;
  });
}

// 使用例
sortBy(users, "age", "asc");
sortBy(users, "name", "desc");

null や undefined の扱い

ソート対象に null や undefined が含まれる場合は、特別な処理が必要です。

const items = [
  { name: "A", value: 10 },
  { name: "B", value: null },
  { name: "C", value: 5 },
  { name: "D", value: undefined }
];

// null/undefined を最後に配置
const sorted = [...items].sort((a, b) => {
  if (a.value == null) return 1;
  if (b.value == null) return -1;
  return a.value - b.value;
});

適切なソート処理を実装することで、ユーザーにとって見やすいデータ表示を実現できます。