Как сразу отсортировать таблицу html по столбцу, создавая ее из массива?
Помогите, пожалуйста! необходимо создать таблицу из массива, в котором находятся результаты гонок. и по итоговому столбцу, где общая сумма, разместить пилотов по местам, то есть отсортировать таблицу по последнему столбцу. нужно, чтоб сразу таблица выводилась отсортированная. можно использовать JS и/или PHP.
Я смог создать таблицу, но участники там расположены просто по порядку, как в массиве.
Вот пример:
$results = array(
array(
'id'=>1,
'name'=>'Тюриков Т.',
'city'=>'Нижний Новгород',
'car'=>'Audi R8',
'attempts'=>array(
'1'=>0,
'2'=>0,
'3'=>0,
'4'=>48
),
),
array(
'id'=>2,
'name'=>'Волик А.',
'city'=>'Санкт-Петербург',
'car'=>'Subaru Impreza',
'attempts'=>array(
'1'=>0,
'2'=>0,
'3'=>0,
'4'=>0
),
),
array(
'id'=>3,
'name'=>'Арутюнян А.',
'city'=>'Армавир',
'car'=>'Audi RS7 Seven Force Stage 3',
'attempts'=>array(
'1'=>49,
'2'=>12,
'3'=>0,
'4'=>62
),
),
);
Ответы (2 шт):
Думаю как-то так, если я правильно понял (это JS).
let results =
[
{
"id": 1,
"name": "Тюриков Т.",
"city": "Нижний Новгород",
"car": "Audi R8",
"attempts": {
"1": 0,
"2": 0,
"3": 0,
"4": 48
}
},
{
"id": 2,
"name": "Волик А.",
"city": "Санкт-Петербург",
"car": "Subaru Impreza",
"attempts": {
"1": 0,
"2": 0,
"3": 0,
"4": 0
}
},
{
"id": 3,
"name": "Арутюнян А.",
"city": "Армавир",
"car": "Audi RS7 Seven Force Stage 3",
"attempts": {
"1": 49,
"2": 12,
"3": 0,
"4": 62
}
}
];
let sorted = results.sort( (a, b) => arrSum(Object.values(b.attempts)) - arrSum(Object.values(a.attempts)) );
console.log(sorted);
function arrSum(arr)
{
return arr.reduce((total, value) => total + value, 0);
}
Решение, похожее на уже данный ответ на JS, но при большом массиве будет работать чуть быстрее: мы один раз обойдём массив, создавая дополнительное поле с суммой результатов, чтобы потом при сортировке каждый раз не пересчитывать это заново. Поле можно игнорировать потом при создании таблицы. Сортировка происходит от большей суммы к меньшей.
const results = [
{
'id': 1,
'name': 'Тюриков Т.',
'city': 'Нижний Новгород',
'car': 'Audi R8',
'attempts': {
'1': 0,
'2': 0,
'3': 0,
'4': 48
},
},
{
'id': 2,
'name': 'Волик А.',
'city': 'Санкт-Петербург',
'car': 'Subaru Impreza',
'attempts': {
'1': 0,
'2': 0,
'3': 0,
'4': 0
},
},
{
'id': 3,
'name': 'Арутюнян А.',
'city': 'Армавир',
'car': 'Audi RS7 Seven Force Stage 3',
'attempts': {
'1': 49,
'2': 12,
'3': 0,
'4': 62
},
},
];
for (const person of results) {
person.attemptsSum = Object.values(person.attempts)
.reduce((sum, num) => sum + num, 0);
}
results.sort((a, b) => b.attemptsSum - a.attemptsSum);
console.log(results);