Сортировка json через js
Не получается отсортировать json -
[{"сумма": "100↵", "дата": "2021-05-25↵"},
{"сумма": "200↵", "дата": "2021-05-26↵"}},
{"сумма": "300↵", "дата": "2021-05-27↵"}]
Собственно делаю вот так вот
var json = JSON.parse(JSON.stringify(json)).sort(function(a, b) {
return a.дата.slice(0, -1) - b.дата.slice(0, -1);
});
И ничего, для суммы всё тоже самое работает
Может поможет:
var json = JSON.parse(JSON.stringify(json)).sort(function(a, b) {
console.log(a.дата.slice(0, -1))
return a.дата.slice(0, -1) - b.дата.slice(0, -1);
});
(js вообще не знаю)
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Может так вы хотите?
let array = [{"сумма": "100↵", "дата": "2021-05-25↵"},
{"сумма": "200↵", "дата": "2021-05-26↵"},
{"сумма": "300↵", "дата": "2021-05-27↵"}];
array.sort((a, b) => (+(a["сумма"]).slice(0, -1)) - ((b["сумма"]).slice(0, -1)));
console.log("сортировка по возрастанию суммы");
console.log(array);
array.sort((a, b) => (+(b["сумма"]).slice(0, -1)) - ((a["сумма"]).slice(0, -1)));
console.log("сортировка по убыванию суммы");
console.log(array);
array.sort((a, b) => new Date(a["дата"].slice(0, -1)) - new Date(b["дата"].slice(0, -1)));
console.log("сортировка по возрастанию даты");
console.log(array);
array.sort((a, b) => new Date(b["дата"].slice(0, -1)) - new Date(a["дата"].slice(0, -1)));
console.log("сортировка по убыванию даты");
console.log(array);
К основному вопросу почему не работает
let array = [{"сумма": "100↵", "дата": "2021-05-25↵"},
{"сумма": "200↵", "дата": "2021-05-26↵"},
{"сумма": "300↵", "дата": "2021-05-27↵"}];
array.forEach(a => console.log(a.сумма.slice(0, -1)));
array.forEach(a => console.log(a.дата.slice(0, -1)));
Как видно из примера вы изменяете исходную строку на item.slice(0, -1) но этого мало нужно преобразовать строки в сравниваемый тип иначе это будет всего лишь сравнение строк, который будет работать для суммы, поскольку операция "-" не определена для строк, автоматом переведет в "number",
let array = [{"сумма": "1050↵", "дата": "2021-05-25↵"},
{"сумма": "1020↵", "дата": "2021-05-26↵"},
{"сумма": "103↵", "дата": "2021-05-27↵"}];
array.sort(function(a, b) {
return a.сумма.slice(0, -1) - b.сумма.slice(0, -1);
});
console.log(array);
а дату он попытается перевести "2021-05-25" в number но не получится и сортировки не будет
let array = [{"сумма": "1050↵", "дата": "2021-05-25↵"},
{"сумма": "1020↵", "дата": "2021-05-26↵"},
{"сумма": "103↵", "дата": "2021-05-27↵"}];
array.sort(function(a, b) {
return a.дата.slice(0, -1) - b.дата.slice(0, -1);
});
console.log(array);
