#javascript #typescript #lodash
#javascript #typescript #Lodash
Вопрос:
У меня есть перечисление:
export enum Foo{
AA= 0,
ZZ= 1,
AB= 2,
ER = 5
}
Я хочу, чтобы мои Bars
, которые содержат свойство enum
as foo
, сортировались по имени перечисления (AA, AB, ER, ZZ), а не по числовому значению (0, 1, 2, 5).
Я использую Lodash, чтобы помочь мне, но, похоже, я не могу заставить его работать:
const orderedBars = _.orderBy(unorderedBars, 'foo');
Ответ №1:
Вы могли бы использовать localeCompare
sort
их на основе строкового значения:
unorderedBars.sort((a,b) => Foo[a.foo].localeCompare(Foo[b.foo]))
Foo[a.foo].localeCompare(Foo[b.foo]))
// displaying on the DOM
const pre = document.createElement(«pre»);
pre.innerHTML = JSON.stringify(array, null, 3)
pre.innerHTML += JSON.stringify(array.map(a => Foo[a.foo]), null, 3) // to see the string values
document.body.appendChild(pre);
» rel=»nofollow noreferrer»>Демонстрация на Typescript playgorund (нажмите «Выполнить»)
Если свойство является строковым, и вы хотите отсортировать его на основе числового значения, вы могли sort
бы сделать это следующим образом:
unorderedBars.sort((a, b) => Foo[a.foo] - Foo[b.foo])