#javascript #sorting
#javascript #сортировка
Вопрос:
var productMaster = [
{id:'A441', name:'Pepsi',category:'Soft Drink', price:15, quantity:2},
{id:'B234', name:'Coke', category:'Soft Drink', price:10, quantity:8},
{id:'A617', name:'Mirinda', category:'Soft Drink', price:20, quantity:20},
{id:'B003', name:'Sprite', category:'Soft Drink', price:16, quantity:5},
{id:'B225', name:'Minute Maid', category:'Soft Drink', price:25, quantity:12},
{id:'A742', name:'5Star', category:'Chocloate', price:10, quantity:3},
{id:'B388', name:'Appy', category:'Soft Drink', price:35, quantity:9},
{id:'A899', name:'Gems', category:'Chocloate', price:12, quantity:11},
{id:'B635', name:'KitKat', category:'Chocloate', price:15, quantity:7},
{id:'B408', name:'Perk', category:'Chocloate', price:8, quantity:15},
{id:'A354', name:'Dairy Milk', category:'Chocloate', price:30, quantity:4}
]
productMaster.sort(compareName);
console.log(JSON.stringify(productMaster));
function compareName(prod1, prod2) {
if (prod1.name > prod2.name)
return 1;
if (prod1.name == prod2.name)
return 0;
if (prod1.name < prod2.name)
return -1;
}
Я отсортировал этот массив по имени в порядке возрастания.Но я не знаю, как отсортировать его, чтобы продукты в одной категории сортировались по названию.
Таким образом, на выходе должны быть продукты с категорией Шоколад, за которыми следуют продукты с категорией Безалкогольный напиток.
Комментарии:
1. Сортировка массива объектов на основе нескольких переменных экземпляра в javascript. Пожалуйста, выполните поиск в Google для этого
Ответ №1:
Вы можете сравнить category
значения, сначала возвращая результат сравнения, если они не совпадают. Если категории совпадают, сравните имя и верните результат сравнения имен.
И сначала он будет отсортирован по категориям, а в той же категории он будет отсортирован по имени.
А для сравнения строк вы можете использовать String.prototype.localeCompare
.
var productMaster = [
{ id: 'A441', name: 'Pepsi', category: 'Soft Drink', price: 15, quantity: 2 },
{ id: 'B234', name: 'Coke', category: 'Soft Drink', price: 10, quantity: 8 },
{ id: 'A617', name: 'Mirinda', category: 'Soft Drink', price: 20, quantity: 20 },
{ id: 'B003', name: 'Sprite', category: 'Soft Drink', price: 16, quantity: 5 },
{ id: 'B225', name: 'Minute Maid', category: 'Soft Drink', price: 25, quantity: 12 },
{ id: 'A742', name: '5Star', category: 'Chocloate', price: 10, quantity: 3 },
{ id: 'B388', name: 'Appy', category: 'Soft Drink', price: 35, quantity: 9 },
{ id: 'A899', name: 'Gems', category: 'Chocloate', price: 12, quantity: 11 },
{ id: 'B635', name: 'KitKat', category: 'Chocloate', price: 15, quantity: 7 },
{ id: 'B408', name: 'Perk', category: 'Chocloate', price: 8, quantity: 15 },
{ id: 'A354', name: 'Dairy Milk', category: 'Chocloate', price: 30, quantity: 4 }
];
console.log(productMaster.sort(compareName));
function compareName(prod1, prod2) {
const categoryCompare = prod1.category.localeCompare(prod2.category);
return categoryCompare === 0 ? prod1.name.localeCompare(prod2.name) : categoryCompare;
}