1. ホーム
  2. javascript

[解決済み] Lodash : orderByを使って大文字小文字を区別せずにソートするには?

2022-11-14 08:30:45

質問

私は この回答 を確認しましたが、同じ結果、つまり大文字小文字を区別しない並べ替えを行うには orderBy の代わりに sortBy から を使うことで、ソート順を指定することができます。 .

私が見つけた唯一の方法は、小文字にマッピングされたクローン "middle"配列を作成することで、それを達成することでした。 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);

これは本当に高くつきそうで、複数のソートや動的なプロパティ名でさらに複雑になりそうです。

もっと良いアイデアはないでしょうか?


プランカーはこちらです。 https://plnkr.co/edit/i1ywyxjFctuNfHtPTcgG

どのように解決するのですか?

この ドキュメント は、関数を "iteratee"として渡すことができることを指定しています。

[iteratees=[_.identity]]です。(Array[]|Function[]|Object[]|string[])を指定します。ソートするためのiteratees。

というわけで、以下のようなことができます。

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>