Как отсортировать массив объектов со связанными массивами?
Есть массив объектов такого типа:
const source = [
{
id: 1,
price: ["100 р", "300 р", "200 р"],
tariff: ["first", "third", "second"],
},
{
id: 2,
price: ["200 р", "100 р", "300 р"],
tariff: ["Dsa", "Qwe", "Cxz"],
},
// и т.д.
];
На выходе необходимо получить массив "source", но отсортированный по price или tariff.
Сложность в том, что price[0] условно связан с tariff[0], так же как и tariff[1] с price[1].
Так же, длины массивов tariff и price всегда одинаковые, т.е. у обоих length может быть как 3, так и 2 и 1.
В результате, если мы сортируем по tariff то получаем отсортированный source:
[
{
id: 2,
price: ["300 р", "200 р", "100 р"],
tariff: ["Cxz", "Dsa", "Qwe"],
},
{
id: 1,
price: ["100 р", "200 р", "300 р"],
tariff: ["first", "second", "third"],
},
// и т.д.
]
То есть мы сортируем и сам source и связанные вместе tariff и price.
Ответы (1 шт):
Автор решения: Meth0d
→ Ссылка
const source = [
{
id: 1,
price: ["100 р", "300 р", "200 р"],
tariff: ["first", "third", "second"],
},
{
id: 2,
price: ["200 р", "100 р", "300 р"],
tariff: ["Dsa", "Qwe", "Cxz"],
},
{
id: 3,
price: ["500 р", "700 р", "1000 р"],
tariff: ["elc", "dde", "intel"],
},
]
function sortIt(arr, type) {
return structuredClone(arr)
.sort((a, b) => {
a = a[type][0]
b = b[type][0]
if (a > b) return 1
else if (a < b) return -1
else return 0
})
.map(el => {
el[type] = el[type].sort()
return el
})
}
console.log(sortIt(source, 'tariff'))
console.log(sortIt(source, 'price'))