▲TOPへ戻る

【javascript】連想配列を昇順または降順に並び変えるsort() compareFunction()

object sort 昇順 降順

やりたいこと

以下の連想配列を名前または年齢をもとに昇順/降順に並び変えたいと思います。

const array = [
  {
    name: "tanaka",
    age: 26,
  },
  {
    name: "sato",
    age: 36,
  },
  {
    name: "suzuki",
    age: 31,
  },
  {
    name: "yamada",
    age: 48,
  },
  {
    name: "akita",
    age: 24,
  },
];
Name Age

連想配列(オブジェクト)を昇順にする関数

以下の関数を作ります。kyeはオブジェクトのkyeを入力します。 先ほどの連想配列なら、nameage 2つがあり、名前を基準に昇順にしたい場合は、a.name, b.name年齢を基準に昇順にしたい場合は、a.age, b.age に書き換えます。

function compareKyeAsc(a, b) {
  if (a.kye > b.kye) {
    return 1;
  }
  if (a.kye < b.kye) {
    return -1;
  }
  return 0;
}

連想配列(オブジェクト)を降順にする関数

先ほどの関数の+(正)-(負) を入れ替えるだけです。

function compareKyeDesc(a, b) {
  if (a.kye > b.kye) {
    return -1;
  }
  if (a.kye < b.kye) {
    return 1;
  }
  return 0;
}

連想配列を昇順/降順に並び変える

Array.from()で、元の配列を書き換えないようにします。

sort()の引数に、先ほどつくった関数を指定します。
例)sort.(compareNameAsc)

// 名前を基準に昇順
const arrAscName = Array.from(array).sort(compareNameAsc);

function compareNameAsc(a, b) {
  if (a.name > b.name) {
    return 1;
  }
  if (a.name < b.name) {
    return -1;
  }
  return 0;
}

// 名前を基準に降順
const arrDescName = Array.from(array).sort(compareNameDesc);

function compareNameDesc(a, b) {
  if (a.name > b.name) {
    return -1;
  }
  if (a.name < b.name) {
    return 1;
  }
  return 0;
}

// 年齢を基準に昇順
const arrAscAge = Array.from(array).sort(compareAgeAsc);

function compareAgeAsc(a, b) {
  if (a.age > b.age) {
    return 1;
  }
  if (a.age < b.age) {
    return -1;
  }
  return 0;
}

// 年齢を基準に降順
const arrDescAge = Array.from(array).sort(compareAgeDesc);

function compareAgeDesc(a, b) {
  if (a.age > b.age) {
    return -1;
  }
  if (a.age < b.age) {
    return 1;
  }
  return 0;
}

参考

js
【javascript】配列の並び替えreverse()とsort() 昇降順の並び替えの仕方
js
【javascript】連想配列をテーブルできれいに表示する方法

こんな記事も読まれています。

profile

パソコン好きなガオ

コロナ禍によるステイホームを機にプログラミングを学ぶ。パソコンに関してはプロではないが、ちょっと詳しい程度。

パソコン

javascript

カメラ

ブログ