#javascript #arrays #sorting #object #methods
#javascript #массивы #сортировка #объект #методы
Вопрос:
Эта функция сортирует массив. Сначала должны отображаться объекты, в которых страна равна стране, указанной во втором аргументе. Затем все остальное. Но я не могу понять, что не так?
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"));
Ответ №1:
Вам нужно сравнить оба объекта с нужной страной и переместить эти элементы в начало.
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; }
Комментарии:
1. Спасибо за этот потрясающий ответ! У меня такая же проблема. Для совместимости с IE я адаптирую ваш код к :
return array.sort(function(a, b) { return (b.country === country) - (a.country === country));
Ответ №2:
Убедитесь 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"));
Ответ №3:
Функция сравнения в Array.sort
должна возвращать:
- значение > 0 для представления a> b
- значение < 0 для представления a < b
- значение == 0 для представления a == b
Итак, самый простой способ — изменить его на:
let one = arr.sort(function(item) {
return (country > item.country) ? 1 : -1
});