2016-12-14 9 views
2

私は様々なことにlodashを使用しているAngular 2タイスクリプトアプリケーションがあります。lodash orderbyがnullで、実際の値が正しくない場合

私は私の問題は時々「propertyNameのは、」NULL値を持つことができるということであるがこれはうまく機能

_.orderBy(this.myArray, ['propertyName'], ['desc']); 

...私はオブジェクトのプロパティを使用して発注していたオブジェクトの配列を持っています。 これらは降順リストの最初の項目として順序付けられ、次に最も高い実数値が続きます。

これらのnull値を降順で最後に表示させたいとします。

私はnullが最初に来る理由を理解します。

これにアプローチする方法を知っている人はいますか?

答えて

2

私はこのようなルックスを必要なコード...

_.orderBy(this.myArray, [(o) => { return o.myProperty || ''}], ['desc']); 
7

_.orderBy()では、iterateesは文字列の代わりにメソッドを使用して値をチェックし、nullの場合は空の文字列を返します。

const myArray = [{ propertyName: 'cats' }, { propertyName: null }, { propertyName: 'dogs' }, { propertyName: 'rats' }, { propertyName: null }]; 
 

 
const result = _.orderBy(myArray, ({ propertyName }) => propertyName || '', ['desc']); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

チェックは、空の文字列にすべてのfalsy値を変換し、私が使用した1、のように、単純なことができます:あなたは厳しいチェックが必要な場合は

propertyName || '' 

あなたは三角形を使用して、ちょうどnullの値を扱うことができます:

propertyName === null ? '' : propertyName 
+0

は、あなたに感謝している場合それ以外のソートが正しくないので、私はtoLowerCaseメソッドを望んでいた私の溶液中で

return _.orderBy(myarray, [ (data) => { if (data[propName] === null) { data[propName] = ""; } return data[propName].toLowerCase(); } ], [sort]); 

です。私は以下の完全なソリューションを投稿しました。 –

+1

なぜあなたは余分なものをすべて必要としますか?[(o)=> {return o.myProperty || ''}] '?私のソリューションはすぐに使えます。スニペットを参照してください。単に 'propertyName'をプロパティの名前に置き換えてください。 –

+0

それはあなたがそれを持っていた方法で私のために働くようには思われませんでしたが、それは私がそれを持っていた方法でした。たぶんそのロダッシュのものか何か。いずれにしても問題は解決されました。ご協力いただきありがとうございます。 –

0

鉱山はこのようになります。 PROPNAMEとソートは、両方の変数が非常に近い別の筐体

関連する問題