プログラミング

【JavaScript】オブジェクトの配列を特定のプロパティでソートする

※当サイトにはプロモーションが含まれています。

投稿日:

1. JavaScriptでオブジェクトの配列をソートする

JavaScript において、以下のようなオブジェクトの配列があるとします。

const ary = [
  { title: 'かきくけこ', content: '...' },
  { title: 'あいうえお', content: '...' },
];

このとき、オブジェクトのプロパティtitle の値を使って、配列をソートする方法を紹介します。

2. String.prototype.localeCompare() を使う場合

String.prototype.localeCompare() を使う方法です。

以下のように書きます。

ary.sort((a, b) => a.title.localeCompare(b.title, 'ja'))

localeCompare() メソッドは、第二引数にロケール (正確には、BCP47 言語タグ)を指定できるので、日本語を表す ‘ja’ を指定しています。

参考

3. Intl.Collator.prototype.compare() を使う場合

Intl.Collatorcompare メソッドを使う方法です。

以下のように書きます。

const collator = new Intl.Collator('ja');
ary.sort((a, b) => collator.compare(a.title, b.title));

Intl.Collator() コンストラクタは、第一引数にロケール(正確には、BCP47 言語タグ)を指定できるので、日本語を表す ‘ja’ を指定しています。

参考

4. どちらを使えばよいのか?

配列要素の数が多い場合は、Intl.Collator.prototype.compare() を使いましょう。

なぜなら、特定の言語を前提とした Intl.Collator のインスタンスを予め1つ生成することで、compare() の処理が効率化されるはずだからです。そうでなければ、Intl.Collator の存在する意味がありません。これは、正規表現の処理のために RegExp というオブジェクトが用意されているのに似ています。

📂-プログラミング
-

執筆者:labo


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Canvas と WebGL を使ったサンプルページを作りました

Canvas と WebGL を使ったサンプルページを作りました 目次1. スクリーンショット2. デモページ3. 内容4. ソースコード5. 参考情報 1. スクリーンショット スクリーンショット …

web development

Web Development for Beginners を読む:レッスン1

目次1. はじめに2. Web Development for Beginners の進め方3. レッスン1「Introduction to Programming Languages and Too …

webpack Bootstrap

Webpack 4 (もしくは 3) で Bootstrap v4.0 を利用するサンプルコード

目次1. はじめに2. サンプルコード3. 想定する環境OSその他4. 今回のディレクトリ構造5. 動作させるための手順1. 今回作業するプロジェクトのディレクトリに移動します2. npm のパッケー …

Web Programming

History API のメモ

History API についての簡単な説明を書きました。 「History API の概要を思い出したくなった時に、ざっと眺める」というのがこのページの主な目的です。 目次1. History AP …

Python

定期的にツイートするbotをPythonで作る方法

Twitterでツイートを行う botプログラムを Python(プログラミング言語)で作ります。このプログラムは、CentOS(Linuxの一種です)上で定期実行します。 目次1. 動作概要2. 環 …