Есть подобный массив объектов:
const tels= [{
price: {
old: '4 444 грн',
new: '3 744 грн',
},
name: 'Motorola MOTO G4 (XT1622) Black',
}, {
price: '6 199 грн',
name: 'Samsung Galaxy J7 (2016) J710F/DS Gold + защитное стекло + чехол!',
}, {
price: {
old: '5 555 грн',
new: '2 995 грн',
},
name: 'Lenovo K5 (A6020a40) Silver',
}, {
price: {
old: '9 999 грн',
new: '8 999 грн',
},
name: 'Apple iPhone 5s 16GB Space Gray',
}, {
price: '6 999 грн',
name: 'Nokia 5 Dual Sim Tempered Blue',
}, {
price: '11 999 грн',
name: 'Samsung Galaxy A5 2017 Duos SM-A520 Black + карта памяти 128гб!',
}];
Необходимо его отсортировать по убыванию price, но если в объекте 2 цены, то использовать new.
Мой вариант решения:
const sortedByPrice = () => {
return tels.sort((a, b) => {
if(typeof b.price === 'object' && typeof a.price === 'object') {
return b.price.new.replace(/[^\d]/g, '') - a.price.new.replace(/[^\d]/g, '')
} else if(typeof a.price === 'object' && typeof b.price === 'string') {
return b.price.replace(/[^\d]/g, '') - a.price.new.replace(/[^\d]/g, '')
} else if(typeof a.price === 'string' && typeof b.price === 'object') {
return b.price.new.replace(/[^\d]/g, '') - a.price.replace(/[^\d]/g, '')
} else {
return b.price.replace(/[^\d]/g, '') - a.price.replace(/[^\d]/g, '')
}
})
}
Как его можно сделать короче, проще, удобнее?