Ваша первая часть верна, а следующая нет. Это:
a.price === b.price ? a.name > b.name ? 1 : -1 : -1;
выделено, выглядит так:
a.price === b.price
? (
a.name > b.name
? 1
: -1
)
: -1;
Внутреннее условное выражение равно a.name > b.name ? 1 : -1
.
Если цены не равны, -1
возвращается В противном случае имена сравниваются. Чтобы перевести это правильно:
if (a.price > b.price) {
return 1;
}
if (a.price !== b.price) {
return -1;
}
if (a.name > b.name) {
return 1;
}
return -1;
Если это используется для обратного вызова .sort
, другой вариант, эквивалентный приведенному выше:
return a.price - b.price || a.name.localeCompare(b.name)