Лода sh порядок по алфавиту Angular объект [] - PullRequest
0 голосов
/ 05 февраля 2020

Я работаю над Angular 7, и мне нужно отсортировать многомерный массив. У меня есть поле, в котором мой пользователь может выбрать национальность. У меня есть Country[] интерфейс с двумя полями внутри CountryCode & CountryName.

Я хочу отсортировать по CountryName, и мой пользователь сможет выбрать национальность в правильном алфавитном порядке , Я видел, что Pipes и Lodash librairy могут помочь мне создать пользовательский канал.

Вот мой фактический код для получения моих CountryCode & CountryName из моей базы данных

private getCountryData() {
this.findAllCountries().subscribe((countries: Country[]) => {
this.countryList = country;
});

А теперь то, что я попробовал с Лодой sh

transform(value: Country[], by: string, direction = "asc" | "desc"): Country[] {
    this.countryList = _.orderBy(this.countryList, ['string', 'countryLabel'], ['asc', 'desc']);
    return this.countryList;
  }

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Вам не нужно lodash, сортировка может быть выполнена с использованием JavaScript, как показано ниже.

var countries = [
   {name: 'India', code: 'IN'},
   {name: 'France', code: 'FR'},
   {name: 'Australia', code: 'AU'},
];

var sorted = countries.sort((a, b) => a.name.localeCompare(b.name));

console.log(sorted);
0 голосов
/ 05 февраля 2020

let asc = "ASC";
let desc = "DESC";
let direction = "DESC";
let countries: Country[] = [{
    CountryCode: "IN",
    CountryName: "INDIA"
  },
  {
    CountryCode: "US",
    CountryName: "UNITED STATES"
  },
  {
    CountryCode: "UK",
    CountryName: "ENGLAND"
  }
];
if (direction == "ASC") {
  countries.sort((a, b) => (a.CountryName > b.CountryName) ? 1 : -1)
} else {
  countries.sort((a, b) => (a.CountryName > b.CountryName) ? -1 : 1)
}
countries.forEach(item => {
  console.log(item.CountryName);
});
let asc ="ASC";
let desc="DESC";
let direction="DESC";
let countries: Country[] =[
  { CountryCode:"IN", CountryName:"INDIA" }, 
  {CountryCode:"US",CountryName:"UNITED STATES"}, 
  {CountryCode:"UK",CountryName:"ENGLAND"}
];

if(direction=="ASC"){
countries.sort((a, b) => (a.CountryName > b.CountryName) ? 1 : -1) 
}else {
  countries.sort((a, b) => (a.CountryName > b.CountryName) ? -1 : 1)
}

countries.forEach(item=>{
console.log(item.CountryName);
});  
...