2016-06-16 1 views
26

私はthis answerを確認したが、同じ結果を達成するために、それは大文字と小文字を区別しないソートを得ることです、私はそれがソート順を指定することができます以来orderByの代わりsortByを使用する必要があります。Lodash:orderByを使って大文字小文字を区別しないコレクションのソートを行う方法は?

私はそれを達成するために見つけた唯一の方法は小文字にマッピングされたクローン化された「中間の」配列を作成することでしたname

const users = [ 
    { name: 'A', age: 48 }, 
    { name: 'B', age: 34 }, 
    { name: 'b', age: 40 }, 
    { name: 'a', age: 36 } 
]; 

let lowerCaseUsers = _.clone(users); 

lowerCaseUsers = lowerCaseUsers.map((user) => { 
    user.name = user.name.toLowerCase(); 
    return user; 
}); 

const sortedUsers = _.orderBy(lowerCaseUsers, ['name'], ['desc']); 

console.log(sortedUsers); 

これは本当に高価なようで、それも複数のソーティングと、より複雑になり、動的プロパティ名。

良いアイデアはありますか?ここで


はPlunkerです:https://plnkr.co/edit/i1ywyxjFctuNfHtPTcgG

答えて

66

documentationあなたは "iteratee" としての機能を渡すことができるように指定します。

[iteratees=[_.identity]] (Array[]|Function[]|Object[]|string[]): The iteratees to sort by.

ですから、

const users = [ 
 
    { name: 'A', age: 48 }, 
 
    { name: 'B', age: 34 }, 
 
    { name: 'b', age: 40 }, 
 
    { name: 'a', age: 36 } 
 
]; 
 

 
const sortedUsers = _.orderBy(users, [user => user.name.toLowerCase()], ['desc']); 
 
console.log(sortedUsers);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>
を行うことができます

+1

これは古いブラウザでは失敗する可能性があります。 – steampowered

+4

これは、ES6をサポートしていないブラウザで構文エラーが発生する場合はもちろん、はいです。読者のエクササイズとして、矢印関数を「通常の」関数(そして 'const'から' var')に変換しておきます。 –

+0

これは動的なプロパティ名で機能しますか? – TheCaptan

関連する問題