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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

222閲覧

javascriptでテーブルの中身をソートして表示したい

alyssa703957

総合スコア12

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2024/02/01 08:23

実現したいこと

typescript内でprismaのdataをソートする処理を実装しています。

テーブルの中身をソートしてまとまりを作って表示させたいです。
このようなデータがあるとして
[
{
date: 2024/02/02,
company_name: 株式会社A,
type: 送信
},
{
date: 2024/02/03,
company_name: 株式会社B,
type: 送信
},
{
date: 2024/02/03,
company_name: 株式会社C,
type: 受信
},
{
date: 2024/02/05,
company_name: 株式会社D,
type: 送信
},
{
date: 2024/02/07,
company_name: 株式会社A,
type: 受信
},
{
date: 2024/02/02,
company_name: 株式会社A,
type: 受信
},
{
date: 2024/02/07,
company_name: 株式会社D,
type: 送信
},
{
date: 2024/02/05,
company_name: 株式会社B,
type: 受信
},
{
date: 2024/02/07,
company_name: 株式会社D,
type: 送信
},
{
date: 2024/02/07,
company_name: 株式会社D,
type: 送信
},
]

こちらのデータを新しい日付→会社名(同じ会社名がまとまるように)→typeも受信が上で送信が下に来るようにソートをしたいです。ソート後は以下を想定
{
date: 2024/02/07,
company_name: 株式会社A,
type: 受信
},
{
date: 2024/02/07,
company_name: 株式会社A,
type: 送信
},
{
date: 2024/02/07,
company_name: 株式会社D,
type: 送信
},
{
date: 2024/02/07,
company_name: 株式会社D,
type: 送信
},
{
date: 2024/02/05,
company_name: 株式会社B,
type: 受信
},
{
date: 2024/02/05,
company_name: 株式会社D,
type: 送信
},
{
date: 2024/02/03,
company_name: 株式会社B,
type: 送信
},
{
date: 2024/02/03,
company_name: 株式会社C,
type: 受信
},
{
date: 2024/02/02,
company_name: 株式会社A,
type: 送信
},
{
date: 2024/02/02,
company_name: 株式会社A,
type: 受信
},

発生している問題・分からないこと

sortがうまくいかずどのように複数の項目をsort関数のreturn 1 ,-1などでソートしていいか分かりません。

該当のソースコード

Typescript

1sort((a, b) => { 2 if (a.date < b.date) { 3 if (a.company_name < b.company_name) { 4 if (a.type < b.type) { 5 return 1; 6 } 7 return 1; 8 } 9 return 1; 10 } else { 11 if (a.company_name < b.company_name) { 12 if (a.type < b.type) { 13 return 1; 14 } 15 return -1; 16 } 17 return -1; 18 } 19}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

sortの複数の仕方など調べました。

補足

sortのreturnがこんがらがってよくわからなくなっています。申し訳ございません。

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

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

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

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

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

luuguas

2024/02/01 09:26

ソート前のデータとソート後のデータに食い違いがあるみたいです。 ソート前の7番目(または9,10番目)の会社名は株式会社Dではなく株式会社Aだと思います。 また、ソート後のデータが正しく並んでいないようです。本文に記載のルールで並べ替えるならば、ソート後のデータの9番目と10番目は逆ではないでしょうか。
guest

回答2

0

こういう、ソートキーがN段階になるケースは、N桁の整数の比較を思い浮かべると理解しやすいでしょう。2つのN桁の整数を比較する場合、1桁目が異なる値なら、その桁の比較だけで全体の大小関係が決まります。1桁目が同じ場合だけ、2桁目のことを考える必要があります。

つまり、

  • a.dateb.date が異なる場合、その2つの比較だけで -11 を返せばよい
  • そららが同じ値の場合、
    • a.company_nameb.company_name が異なる場合、その2つの比較で -11 を返せばよい
    • それらが同じ値の場合、a.typeb.type の比較で -1 0 1 を返せばよい

投稿2024/02/01 09:18

int32_t

総合スコア20884

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

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

0

ベストアンサー

冗長に書くならこんな感じ

javascript

1data.sort((x,y)=>{ 2 if(x.date<y.date){ 3 return -1; 4 }else if(x.date>y.date){ 5 return 1; 6 }else if(x.company_name<y.company_name){ 7 return -1; 8 }else if(x.company_name>y.company_name){ 9 return 1; 10 }else if(x.type<y.type){ 11 return -1; 12 }else if(x.type>y.type){ 13 return 1; 14 }else{ 15 return 0; 16 } 17});

投稿2024/02/01 09:57

yambejp

総合スコア114845

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問