2017-07-05 2 views
0

この小さな書店アプリを作ろうとしていて、価格と名前、昇順と降順で書籍を並べ替えるオプションを追加したかったのです。価格の並べ替えは非常に奇妙な順序で起こり、その理由を見つけることができません。もし私が助けてくれる人がいれば、私はAngularでかなり新しいです。ありがとうございました!ここで名前で並べ替えがうまく動作しますが、価格で正しく並べ替えることはできません

は、ソースコードである:https://github.com/EgomortIncognitus/bookstore

ここでソートby.pipe.tsからコードされています

import { Pipe, PipeTransform } from '@angular/core'; 

@Pipe({ 
    name: 'sortBy' 
}) 
export class SortByPipe implements PipeTransform { 

    transform(array: Array<string>, args?: any): any { 

    if (array) { 

     let sortField = args[0]; 
     let sortDirection = args[1]; 
     let modifier = 1; 

     if (sortDirection === 'desc') { 
     modifier = -1; 
     } 

     array.sort((a: any, b: any) => { 
     if (a[sortField] < b[sortField]) { 
      return -1 * modifier; 
     } else if (a[sortField] > b[sortField]) { 
      return 1 * modifier; 
     } else { 
      return 0; 
     } 
     }); 

     return array; 
    } 
    } 

} 
+0

は、数字または文字列として保存された賞ですか? –

+0

Typescriptはjavascriptではないので、javascriptでタグ付けしないでください。そうしなければならないのは、typescriptをjavascriptに渡すことと関係がある場合です。 – Endless

+0

私は少し失われているので、申し訳ありませんが、私は明示的な答え/説明が必要です。 –

答えて

0

ソート名と並べ替え番号ではJavascript

に 同じではありません

これをチェックしてください:

0

あなたが行う文字列をソートしていますlexicographically

例として、"9" > "800000"でも9 < 800000です。

+0

申し訳ありませんが、私は少し失われているので、明示的な答え/説明が必要です。ありがとうございました。 –

+0

数字をソートしたいが、あなたが比較するのは文字列です。あなたは '' abbbbb ''の後に' 'b" 'が来ると期待しますが、なぜ" "800000" 'の後ろに' '9" 'が来るのか混乱します。 「9」は「8」よりも後であり、他の場合と同様に、最初の文字が異なっても、他の文字はもはや重要ではありません。あなたはちょうどそれが数字であるかのように見て、実際にはそれは文字列ではありません。 – ASDFGerte

+0

オック、アイデアを持っています!その問題を解決するためのガイダンスを教えていただけますか?前もって感謝します! –

関連する問題