Я не знаю, возможно ли это. Я пробовал везде искать ответ, но ничего. Сейчас я пытаюсь придумать, как составить список лучших ютуберов и отсортировать его по подписчикам.
const points = ["Apple - 40", "Orange - 80", "Lemon - 140"];
points.sort(function(a, b){return b-a});
Я пытался это сделать, но ничего не дало. Я хочу, чтобы он сортировался по значению в конце каждой строки, а не по первой строке.
Каким должен быть результат? «L»emon находится перед диапазоном «O»? то есть по алфавиту? Или игнорируйте буквы и используйте только цифры. Что делать, если у вас «-40» вместо «- 40» — это до 0? Что делать, если у вас есть ["Orange - 1", "Apple - 1"]
, что на первом месте?
@AlexanderNenachev в твоем ответе нет ничего плохого, зачем его удалять? Мой комментарий был просто насмешливым по поводу «лучшего» комментария о производительности.
Этот вопрос похож на: Как численно сортировать строки в JavaScript. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.
Ваша текущая логика sort()
пытается привести строки к числовым значениям. Поскольку они начинаются с буквенных символов, это не будет работать так, как вы ожидаете.
Чтобы сделать то, что вам нужно, вам нужно вручную извлечь цифры и отсортировать их напрямую. Есть много способов сделать это. В приведенном ниже примере я использовал регулярное выражение для удаления всего, что не является цифрой, но другие подходы могут работать лучше для формата строки, доступного в вашем конкретном случае использования.
const points = ["Apple - 40", "Orange - 80", "Lemon - 140"];
const getNumber = str => +(str.replace(/^\D+/g, ''));
let sortedPoints = points.sort((a, b) => getNumber(b) - getNumber(a));
console.info(sortedPoints);
Вы можете написать специальную функцию для сравнения, например:
const points = ["Apple - 40", "Orange - 80", "Lemon - 140"];
points.sort(function(a, b){
let numberA = a.split(' - ')[1];
let numberB = b.split(' - ')[1];
return numberB - numberA;
});
Он получает число из строки и сравнивает его, а не всю строку.
Ваша функция сравнения всегда возвращает
NaN
...