質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

913閲覧

ORELLYさんの初めてのJavascriptの参考書の中のオブジェクト配列のソートがうまく動かない

integral_ys

総合スコア11

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/12/09 11:20

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
OREILLYさんの初めてのJavascriptという参考書で勉強をしているのですが、配列のソートで並び替えがうまくいきません。教科書と同じように書いているのですが、並び替えが変わりません。

該当のソースコード

Javascript

1let arr = [ 2 {name: "Suzanne"}, 3 {name: "Jim"}, 4 {name: "Trevor"}, 5 {name: "Amanda"}, 6]; 7 8console.log(arr); 9arr.sort((a, b) => a.name > b.name); 10console.log("------------"); 11console.log(arr); 12arr.sort((a, b) => a.name[1] < b.name[1]); 13console.log("------------"); 14console.log(arr); 15 16//実行結果 17[ 18 { name: 'Suzanne' }, 19 { name: 'Jim' }, 20 { name: 'Trevor' }, 21 { name: 'Amanda' } 22] 23------------ 24[ 25 { name: 'Suzanne' }, 26 { name: 'Jim' }, 27 { name: 'Trevor' }, 28 { name: 'Amanda' } 29] 30------------ 31[ 32 { name: 'Suzanne' }, 33 { name: 'Jim' }, 34 { name: 'Trevor' }, 35 { name: 'Amanda' } 36] 37 38//参考書の実行結果 39[ 40 { name: 'Suzanne' }, 41 { name: 'Jim' }, 42 { name: 'Trevor' }, 43 { name: 'Amanda' } 44] 45------------ 46[ 47 { name: 'Amanda' }, 48 { name: 'Jim' }, 49 { name: 'Suzanne' }, 50 { name: 'Trevor' } 51] 52------------ 53[ 54 { name: 'Suzanne' }, 55 { name: 'Trevor' }, 56 { name: 'Amanda' }, 57 { name: 'Jim' } 58] 59

補足情報(FW/ツールのバージョンなど)

node v17.2.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

本のほうが間違ってますね。そういうときはまずは正誤表があるか調べて、あれば当該箇所が記載されていないか確認するとよいかと思います。

  • 初めてのJavaScript 第3版 —— ES2015以降の最新ウェブ開発 Ethan Brown著 武舎広幸+武舎るみ訳

正誤表:https://www.marlin-arms.com/support/ljs3/errata.html

投稿2021/12/09 11:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

integral_ys

2021/12/09 11:55

本が間違っているとは気づきませんでした...。 貼って頂いたURLを見て解決しました!ありがとうございます!
退会済みユーザー

退会済みユーザー

2021/12/09 14:10

コメントありがとうございます。 本が間違っていることは、ままあります。 ところで正誤表にある正のコードの、nameでソートする場合の arr.sort((a, b) => a.name > b.name ? 1 : (a.name === b.name ? 0 : -1)); // nameでソート というコードのsortに渡している比較関数は (a, b) => a.name > b.name ? 1 : (a.name === b.name ? 0 : -1) というもので、これでも意図したソートになりますが、二つの文字列を辞書順に比較するときに適したメソッドがあります。文字列の localeCompare というメソッドです。 MDN: String.prototype.localeCompare() https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare また、比較関数の引数部分は (a, b) で、a と b には配列要素のオブジェクトが入ってきますが、ここに分割代入を使って比較対象それぞれの name プロパティを取り出してそれらを a, b という名前の変数で取り出すことができます。 上記2点で修正すると、比較関数を以下のように書けます。 ({name: a}, {name: b}) => a.localeCompare(b) サンプル ???? https://codepen.io/kilesa/pen/wvrWEwg?editors=0012
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問