Сортировка объекта в массиве через метод - PullRequest
1 голос
/ 17 апреля 2019

Эта функция сортирует массив.Сначала должны отображаться объекты, в которых страна равна той, которая указана во втором аргументе.Тогда все остальное.Но я не могу понять, что не так?

 
const arr = [
  {  
"name":"BMW",
"price":"55 000",
"country":"Germany",
"certificate":"yes"
  },
  {  
"name":"Mitsubishi",
"price":"93 000", 
"constructor":"Bar John",
"door":"3",
"country":"Japan",
  },
  {  
"name":"Mercedes-benz",
"price":"63 000", 
"country":"Germany",
"certificate":"yes"
  },
  {  
"name":"TOYOTA", 
"price":"48 000", 
"max_people":"7",
"country":"Japan",
"certificate":"yes"
  },
  {  
"name":"Volkswagen",
"price":"36 000", 
"constructor":"Pier Sun",
"country":"Germany",
"certificate":"no"
  },
 ];

 function countries(arr,country){
  let one =  arr.sort(function(item){
return country > item.country;
  });
  return one;
}

console.log(countries(arr,"Japan"));

Ответы [ 3 ]

3 голосов
/ 17 апреля 2019

Вам нужно сравнить оба объекта с нужной страной и переместить эти элементы наверх.

Array#sort изменяет порядок массива.

function countries(array, country) {
    return array.sort(({ country: a }, { country: b }) => (b === country) - (a === country));
}

const array = [{ name: "BMW", price: "55 000", country: "Germany", certificate: "yes" }, { name: "Mitsubishi", price: "93 000", constructor: "Bar John", door: "3", country: "Japan" }, { name: "Mercedes-benz", price: "63 000", country: "Germany", certificate: "yes" }, { name: "TOYOTA", price: "48 000", max_people: "7", country: "Japan", certificate: "yes" }, { name: "Volkswagen", price: "36 000", constructor: "Pier Sun", country: "Germany", certificate: "no" }];

console.log(countries(array, "Japan"));
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 17 апреля 2019

Функция сравнения в Array.sort должна возвращать:

  • значение> 0 для представления a> b
  • значение <0 для представления <b </li>
  • значение == 0 для представления a == b

Таким образом, самый простой способ - изменить его на:

let one = arr.sort(function(item) {
    return (country > item.country) ? 1 : -1
});
0 голосов
/ 17 апреля 2019

Убедитесь, что обратный вызов sort принимает два параметра, и немного измените логику сортировки:

 

const arr = [
  {  
"name":"BMW",
"price":"55 000",
"country":"Germany",
"certificate":"yes"
  },
  {  
"name":"Mitsubishi",
"price":"93 000", 
"constructor":"Bar John",
"door":"3",
"country":"Japan",
  },
  {  
"name":"Mercedes-benz",
"price":"63 000", 
"country":"Germany",
"certificate":"yes"
  },
  {  
"name":"TOYOTA", 
"price":"48 000", 
"max_people":"7",
"country":"Japan",
"certificate":"yes"
  },
  {  
"name":"Volkswagen",
"price":"36 000", 
"constructor":"Pier Sun",
"country":"Germany",
"certificate":"no"
  },
 ];

 function countries(arr,country){
  let one =  arr.sort(function(a, b){
return a == country ? -1 : b == country ? 1 : 0;
  });
  return one;
}

console.log(countries(arr,"Japan"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...