2016-05-29 4 views
0

新しいコンソールにアップグレードした結果、またはいつも起こったことがあるかどうかはわかりませんが、私は読みやすさのために小さな数字を使用していたJavaScript - Firebaseでソートされた数字が間違った順序で表示される

ref.orderByKey().startAt(1).endAt(20).on("value", function); 
// Returns: 1, 12, 2 
// Desired result: 1, 2, 3, 4, 12 

注、私は実際にある2016-4-13のような日付文字列を使用しています:私はこのような何かをした場合ので、

1, 12, 2, 21, 3, 33, 4 

:番号は次のように命じます彼らはなぜ文字列です。

これに対する解決策はありますか、またはクエリやキーの可読性を犠牲にすることを決定する必要がありますか?


さらに詳しい情報: データが日付の大規模なリストから日付のセットを取得しています。 startAtとendAtの唯一の理由は、ダウンロードするユーザーの量を制限することです。たとえば、特定の時間から1週間を取得する。

コード例

ref.orderByKey().startAt("2016-4-5").endAt("2016-4-11").on("value", function(snapshot){ 
    //returns null 
}); 

データ

{ 
    "GroupOne" : { 
    "2015-11-1" : { 
     "simplelogin:75" : 5.4, 
     "simplelogin:77" : 5.5, 
     "simplelogin:80" : 5.5 
    }, 
    "2015-11-2" : { 
     "simplelogin:75" : 5.4, 
     "simplelogin:77" : 5.6, 
     "simplelogin:80" : 5.9 
    }, 
    "2015-11-22" : { 
     "simplelogin:24" : 2.1 
    }, 
    "2015-11-3" : { 
     "simplelogin:77" : 3, 
     "simplelogin:80" : 0.2 
    }, 
    "2015-11-31" : { 
     "simplelogin:77" : 15.8 
    }, 
    "2015-11-4" : { 
     "simplelogin:77" : 5.1, 
     "simplelogin:80" : 0.3 
    }, 
    "2015-11-5" : { 
     "simplelogin:77" : 3.8 
    }, 
    "2015-11-6" : { 
     "simplelogin:75" : 0.1 
    }, 
    "2016-0-1" : { 
     "simplelogin:77" : 13.1 
    }, 
    "2016-0-10" : { 
     "simplelogin:75" : 3 
    }, 
    "2016-0-11" : { 
     "simplelogin:75" : 3 
    }, 
    "2016-0-12" : { 
     "48506d5c-319e-4f47-a29f-c47d6ed82a17" : 3.8, 
     "simplelogin:75" : 3.2 
    }, 
    "2016-0-22" : { 
     "simplelogin:78" : 1 
    }, 
    "2016-0-5" : { 
     "simplelogin:80" : 3 
    }, 
    "2016-0-8" : { 
     "simplelogin:24" : 0.9, 
     "simplelogin:77" : 3.2 
    }, 
    "2016-1-23" : { 
     "simplelogin:75" : 3.1 
    }, 
    "2016-1-27" : { 
     "simplelogin:75" : 6.3 
    }, 
    "2016-1-28" : { 
     "simplelogin:75" : 12.2 
    }, 
    "2016-2-15" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-2-2" : { 
     "simplelogin:75" : 5.1 
    }, 
    "2016-2-22" : { 
     "simplelogin:75" : 1, 
     "simplelogin:78" : 1, 
     "simplelogin:80" : 1 
    }, 
    "2016-2-23" : { 
     "simplelogin:75" : 4.3 
    }, 
    "2016-2-24" : { 
     "simplelogin:75" : 5.7 
    }, 
    "2016-2-25" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-2-26" : { 
     "simplelogin:75" : 2 
    }, 
    "2016-2-27" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-2-28" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-2-30" : { 
     "simplelogin:75" : 6 
    }, 
    "2016-3-1" : { 
     "simplelogin:75" : 2, 
     "simplelogin:77" : 2 
    }, 
    "2016-3-11" : { 
     "simplelogin:75" : 8.6, 
     "simplelogin:80" : 0.9 
    }, 
    "2016-3-12" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-3-14" : { 
     "simplelogin:75" : 3.8 
    }, 
    "2016-3-6" : { 
     "simplelogin:77" : 13.2 
    }, 
    "2016-4-10" : { 
     "simplelogin:75" : 2 
    }, 
    "2016-4-15" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-4-25" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-4-5" : { 
     "simplelogin:75" : 6 
    } 
    } 
} 
+1

文字列をソートしています... Date.parse( "2016-4-13")を使用するか、そのデータ文字列を動的に保持する任意の引数を渡します。 – Redu

+0

含まれているコードが正しい数値を返します。しかし、あなたはそれらを処理する方法を示していません。つまり、何がうまくいかないと言うのは難しいです。また、Firebaseデータベースに保存されているデータについて話すときには、JSONの最小スニペットを含めて、どのデータを使用しているかを表示してください。 Firebaseコンソールのエクスポートボタンをクリックすると、簡単にJSONを(テキストとして、スクリーンショットなしで)取得できます。 –

+0

私はいくつかの情報を追加しましたが、現在の最良の答えは、より小さな数字の前にゼロを追加するという解決策だと思います。 –

答えて

1

文字列は厳密に書式設定されているので、アルファソートは適切な処理を行います(yyyy-mm-ddと仮定して)。

+0

ああ、私はちょうど1桁の前にゼロを追加する必要があります。 –

0

JavaScriptのソートは、番号順に動作しません。それはアルファベット順にもっと機能します。値でソートするには

、あなたはパラメータを渡す必要があります。ここ

var result = document.getElementById("result"); 
 

 
var numbers = [1, 12, 2, 21, 3, 33, 4]; 
 

 
var sorted = numbers.filter(function(number) { 
 
    return number >= 1 && number <= 20; 
 
}).sort(function(a,b) { return a - b }); 
 

 
result.innerHTML = sorted;
<p id="result"></p>

は見た目Array.prototype.sort

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

のドキュメントですFirebaseのorderbyKey()メソッドのように、このタイプの実装があります。それは命令を説明するでしょう。

あなたのデータをソートするorderByKey()を使用する場合は、次のように、データは、キー名の昇順で返されます。 のキーは文字列でなければなりません。

https://www.firebase.com/docs/web/guide/retrieving-data.html#section-ordered-data

私は、この関数のソースコードを見つけることができないので、私は全くそれを使用して、私の方法を使用しないことをお勧めします。

関連する問題