Есть ли способ отсортировать массив по наибольшему числу со строкой рядом с ним?

Я не знаю, возможно ли это. Я пробовал везде искать ответ, но ничего. Сейчас я пытаюсь придумать, как составить список лучших ютуберов и отсортировать его по подписчикам.

const points = ["Apple - 40", "Orange - 80", "Lemon - 140"];

points.sort(function(a, b){return b-a});

Я пытался это сделать, но ничего не дало. Я хочу, чтобы он сортировался по значению в конце каждой строки, а не по первой строке.

Ваша функция сравнения всегда возвращает NaN...

jonrsharpe 09.08.2024 16:07

Каким должен быть результат? «L»emon находится перед диапазоном «O»? то есть по алфавиту? Или игнорируйте буквы и используйте только цифры. Что делать, если у вас «-40» вместо «- 40» — это до 0? Что делать, если у вас есть ["Orange - 1", "Apple - 1"], что на первом месте?

fdomn-m 09.08.2024 16:12

@AlexanderNenachev в твоем ответе нет ничего плохого, зачем его удалять? Мой комментарий был просто насмешливым по поводу «лучшего» комментария о производительности.

fdomn-m 09.08.2024 16:18

Этот вопрос похож на: Как численно сортировать строки в JavaScript. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

jabaa 09.08.2024 16:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
4
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваша текущая логика 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;
});

Он получает число из строки и сравнивает его, а не всю строку.

Другие вопросы по теме