2016-12-24 16 views
1

日付コードをソートするためにこのコードを書いていますfdate昇順または降順ですが、私が必要とするのは空白の値が得られます。私が降順で並べ替えるとき、これらの空白のレコードを最後に置く方法は?空白があるときに日付データをソートする方法

var dataset = [{ 
 
    "field1": "dfg34r", 
 
    "field2": "32.24" 
 
}, { 
 
    "field1": "d3f32dg", 
 
    "field2": "32.52", 
 
    "fdate": "3/2/2015" 
 
}, { 
 
    "field1": "fdbhjjts", 
 
    "fdate": "7/4/2015" 
 
}, { 
 
    "field1": "dfg4r", 
 
    "field2": "2.24" 
 
}, { 
 
    "field1": "fgsdfwe", 
 
    "fdate": "3/1/2015" 
 
}]; 
 

 
dataset.sort(function(a, b) { 
 
     var x = new Date(a.fdate); 
 
     var y = new Date(b.fdate); 
 
     return x.valueOf() - y.valueOf(); 
 
    }); 
 

 
document.getElementById("demo").innerHTML = JSON.stringify(dataset);
<p id="demo"></p>

+0

あなたは既に昨日この正確な質問を:http://stackoverflow.com/questions/41309228/sorting-data-that-has-blanks-or-gaps – Dekel

+0

@Dekel私はいけませんこのサンプルデータでは何をすべきか分かっていますが、実際のデータではソート作業はありません!! – Wel

+0

これは、まったく同じ質問を毎日開かせる理由ではありません。より多くの注意を喚起したいのであれば、あなたの質問に恩恵を払うことができます(問題はその質問が十分にはっきりしていないと思いますが、それは私だけかもしれません)。 – Dekel

答えて

1

より普遍的な解決策は、プロパティが欠落しているかどうかを確認し、並べ替え順序を決定するために1または-1を返すことです。これは、データ型に関係なく機能します。

私はfactorオプションを追加しました。これを変更して昇順/降順を決定できます。

var dataset = [{"field1":"dfg34r","field2":"32.24"},{"field1":"d3f32dg","field2":"32.52","fdate":"3/2/2015"},{"field1":"fdbhjjts","fdate":"7/4/2015"},{"field1":"dfg4r","field2":"2.24"},{"field1":"fgsdfwe","fdate":"3/1/2015"}]; 
 

 
var factor = 1; // change to -1 for descending 
 

 
dataset.sort(function(a, b) { 
 
    // if prop a doesn't exist 
 
    if (!a.fdate) { 
 
    return factor * -1; 
 
    } 
 

 
    // if prop b doesn't exist 
 
    if (!b.fdate) { 
 
    return factor * 1; 
 
    } 
 

 
    return factor * (new Date(a.fdate) - new Date(b.fdate)); 
 
}); 
 

 
console.log(dataset);

オリジナルソリューション

fdateが代わりに使用0存在しない場合。 new Date(0)は、UNIXの最初の日付です - 1970年1月1日02:00:00 GMT + 0200(東ヨーロッパ標準時)。

var dataset = [{"field1":"dfg34r","field2":"32.24"},{"field1":"d3f32dg","field2":"32.52","fdate":"3/2/2015"},{"field1":"fdbhjjts","fdate":"7/4/2015"},{"field1":"dfg4r","field2":"2.24"},{"field1":"fgsdfwe","fdate":"3/1/2015"}]; 
 

 
dataset.sort(function(a, b) { 
 
    var x = new Date(a.fdate || 0); 
 
    var y = new Date(b.fdate || 0); 
 
    return x.valueOf() - y.valueOf(); 
 
}); 
 

 
console.log(dataset);

+0

fdateが01/01/1970より前の場合、これは壊れます。 –

+0

これは本当に奇妙です。このサンプルデータではソートが動作しますが、実際のデータでは不正なソートが発生します。 – Wel

+0

@OriDroriこれでギャップや空のレコードがなくなりましたが、ソート自体が正しくありません降順でソートするための実際のデータを含む画像を参照http://imgur.com/a/8KcQr – Wel

関連する問題