задача на сортировку строки

111
31 декабря 2020, 13:30

Нашел интересную задачку, но решение до конца не смог довести.Написать функцию, которая на вход получает строку, которая содержит числа (пример: "56 65 74 100 99 68 86 180 90"). Необходимо отсортировать, используя "вес" каждого числа. "Вес" будет считаться как сумма всех цифр числа (вес 56 = 5 + 6;). Если вес у чисел одинаковый (например 180 (вес 9) и 90 (вес 9)), то их необходимо сравнить как строки. Результатом должна возвращаться строка, которая состоит из отсортированных чисел. Вот что я налопатил

function b(str) {
    var sorter = str.split(' ');var arr;
    sorter.sort(function(a,b) {
        for(var i = 0;i<sorter.length;i++) {
            arr = sorter[i].split('').reduce(function(a,b){a=+a;b=+b;return a+b});
        }
        console.log(sorter)
    })
}
b('103 123 4444 99 2000')
Answer 1

Функция sort принимает в качестве аргумента callback-функцию, которая должна сравнивать два значения и возвращать отрицательное/положительное число или 0 в зависимости от результата. Нужно с осторожностью подходить к любой другой логике, описываемой внутри этой функции. Например, цикл в вашем случае абсолютно не нужен - он будет запускаться при каждом вызове callback-функции и выполнять одну и ту же работу.

Правильней будет вынести логику в функцию-helper, вызываемую только для сравниваемых значений.

Кроме того, обратите внимание на метод compare объекта Intl.Collator. Именно этот метод стоит использовать для сортировки строк, если это строки, состоящие из цифр (или символов латинского алфавита).

function strSum(s) { 
    return s.split("").reduce((a, b) => Number(a) + Number(b)) 
} 
 
function sort(s) { 
    return s 
        .split(" ") 
        .sort((a, b) => { 
            const a1 = strSum(a) 
            const b1 = strSum(b) 
 
            return a1 !== b1 
                ? a1 - b1 
                : new Intl.Collator().compare(a, b) 
        }) 
        .join(" ") 
} 
 
console.log(sort('102 2000 10 4 51 302')); 
console.log(sort('103 123 4444 99 2000')); 
console.log(sort('11 31 56 4'));

READ ALSO
&#39;hasOwnProperty&#39; is not a function. Что не так?

'hasOwnProperty' is not a function. Что не так?

Пытаюсь выявить наличие определенного параметра в url:

103
Ошибка в Google App Script при отправке данных формы в Google Sheets

Ошибка в Google App Script при отправке данных формы в Google Sheets

Цель - отправить данные формы в Google Sheets для записи в соответствующие поляЯ использовал эту статью, но мой скрипт выдает ошибку:

161
Выбрать первые 3 созданные экземпляра класса JavaScript

Выбрать первые 3 созданные экземпляра класса JavaScript

Всем привет! Возникла задача: Существует n кол-во дивов с одним классом и надо выбрать именно первые 3 div с помощью JS или JQНикак не могу найти...

117