Эти элегантные и духовные фрагменты кода JS

внешний интерфейс JavaScript
Эти элегантные и духовные фрагменты кода JS

Мой личный сайт:Туоба'С Фронт Энд Инн~ Поймите один га. вотисходный адрес, если вы обнаружите какие-либо ошибки в моей статье, пожалуйста, не стесняйтесь жаловаться мне, и давайте учиться вместе и добиваться прогресса вместе φ(>ω

Введение

Написание кода может быть для вас сочетанием клавиш Ctrl+C и Ctrl+V, если вам комфортно с обыденностью; программирование может стать искусством, если вы творческий человек. Мы постоянно сталкиваемся с какими-то фрагментами кода, которые можно назвать элегантной одухотворенностью, здесь, на мой взгляд, я перечислю те части, которые видел.

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

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

Примечание. Все приведенные ниже вопросы взяты изcodewars

codewars

Вопросы и безрассудные решения

  1. Create Phone Number

    Вопрос: Напишите функцию, которая принимает массив из 10 целых чисел (массив от 0 до 9) и возвращает строку из этих чисел в виде телефонного номера вида (123) 456-7890.

    Example:

    createPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) // => returns "(123) 456-7890"1111
    

    Решение дурака:

    const createPhoneNumber = n => "(" + n[0] + n[1] + n[2] + ") " + n[3] + n[4] + n[5] + "-" + n[6] + n[7] + n[8] + n[9]
    
  2. Find the odd int

    Вопрос: Учитывая массив, найдите нечетное количество вхождений числа.

    PS: Всегда будет только целое число, появляющееся нечетное количество раз.

    Example:

    findOdd([1,1,2,-2,5,2,4,4,-1,-2,5]); // => returns -1
    

    Решение дурака:

    function findOdd(A) {
        let count = 0;
        do {
            let i = A.splice(count,1,'p')[0];
            if (i !== 'p'){
                let result = [i];
                A.forEach(function (e, index) {
                    if (e === i){
                        i === result[0] ? result.pop(): result.push(i);
                        A.splice(index, 1, 'p');
                    }
                });
                if (result.length > 0){
                    return result[0]
                }
            }
            count ++;
        } while (A.length > count);
    }
    
  3. Who likes it?

    Тема: Вы, наверное, знаете систему «Нравится» на Facebook или других сайтах. Люди могут «лайкать» сообщения в блогах, изображения или другие элементы. Мы хотим создать текст, который будет отображаться рядом с таким элементом.

    Реализуйте функцию, входными данными которой является массив, содержащий имена людей, которым понравился элемент. Возвращаемое значение представляет собой текст в следующем формате:

    likes [] // must be "no one likes this"
    likes ["Peter"] // must be "Peter likes this"
    likes ["Jacob", "Alex"] // must be "Jacob and Alex like this"
    likes ["Max", "John", "Mark"] // must be "Max, John and Mark like this"
    likes ["Alex", "Jacob", "Mark", "Max"] // must be "Alex, Jacob and 2 others like this"
    

    Решение дурака:

    const likes = names => {
        switch (names.length) {
            case 0: return 'no one likes this'
            case 1: return names[0] + ' likes this'
            case 2: return names[0] + ' and ' + names[1] + ' like this'
            case 3: return names[0] + ', ' + names[1] + ' and ' + names[2] + ' like this'
            default: return names[0] + ', ' + names[1] + ' and ' + (names.length - 2) + ' others like this'
        }
    }
    
  4. Shortest Word

    Вопрос: Учитывая строку слов, верните длину самого короткого слова.

    Строки никогда не бывают пустыми, и вам не нужно думать о разных типах данных.

    Example:

    findShort("bitcoin take over the world maybe who knows perhaps") // returns 3,因为最短单词是the和who,长度为3
    

    Решение дурака:

    // 其实也不是特别莽
    const findShort = s => s.split(' ').map(w => w.length).sort((a,b) => a-b)[0];
    
  5. Sum of Digits / Digital Root

    Вопрос: Создайте функцию, которая вычисляет цифровой корень.

    Цифровой корень — это рекурсивная сумма цифр числа. Учитывая n, возьмите сумму n цифр. Если значение состоит из двух или более цифр, выполняйте рекурсию таким образом, пока не будет получена одна цифра, которая является цифровым корнем. Это работает только для натуральных чисел.

    Example:

    digital_root(16)
    => 1 + 6
    => 7
    
    digital_root(942)
    => 9 + 4 + 2
    => 15 ...
    => 1 + 5
    => 6
    
    digital_root(132189)
    => 1 + 3 + 2 + 1 + 8 + 9
    => 24 ...
    => 2 + 4
    => 6
    
    digital_root(493193)
    => 4 + 9 + 3 + 1 + 9 + 3
    => 29 ...
    => 2 + 9
    => 11 ...
    => 1 + 1
    => 2
    

    Решение дурака:

    function digital_root(n) {
        let num = n;
        if (num < 10){
            return num
        }else {
            return arguments.callee((num+'').split('').reduce(function (a,b) {
                return parseInt(a) + parseInt(b)
            }))
        }
    }
    

Элегантность и духовные решения

  1. Create Phone Number

    function createPhoneNumber(numbers){
        var format = "(xxx) xxx-xxxx";
        for(var i = 0; i < numbers.length; i++){
            format = format.replace('x', numbers[i]);
        }
        return format;
    }
    

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

  2. Find the odd int

    const findOdd = (xs) => xs.reduce((a, b) => a ^ b);
    

    Думаю, не менее 70% людей удивятся, когда увидят это решение. Вспомните, как давно вы использовали побитовые операции? В этой задаче используется метод reduce() и побитовая операция XOR, которая эквивалентна побитовому XOR для всех четных чисел, за которым следует 0, а затем нечетные числа и 0 подвергаются побитовому XOR для получения самих себя, чтобы получить решение.

  3. Who likes it?

    function likes (names) {
        var templates = [
            'no one likes this',
            '{name} likes this',
            '{name} and {name} like this',
            '{name}, {name} and {name} like this',
            '{name}, {name} and {n} others like this'
        ];
        var idx = Math.min(names.length, 4);
        
        return templates[idx].replace(/{name}|{n}/g, function (val) {
            return val === '{name}' ? names.shift() : names.length;
        });
    }
    

    Это не нужно объяснять, используйте шаблонную строку, не вводите ее вручную.

  4. Shortest Word

    function findShort(s){
        return Math.min.apply(null, s.split(' ').map(w => w.length));
    }
    

    Такие вопросы, как разница между apply и call, часто можно встретить на собеседованиях, но сколько людей на самом деле написали код, используя их на работе?

  5. Sum of Digits / Digital Root

    function digital_root(n) {
        return (n - 1) % 9 + 1;
    }
    

    Это гениальное решение. Некоторые люди могут не понять, здесь используется теорема, которую мы выучили в начальной школе: «сумма всех битов, кратная 9, делится на 9». У вас может не сложиться впечатление об этом, но «число, сумма всех битов которого кратна 3, делится на 3», знайте, это та же истина. Что касается того, почему (n-1) добавляет 1 после деления 9, это для того, чтобы предотвратить само кратное 9 решение 0.

резюме

Приведенные выше пять фрагментов кода можно использовать для решения проблемы с помощью замены, битовой операции, шаблонной строки, применения и даже теоремы о том, что «сумма всех битов кратна 9, может делиться на 9», что на самом деле удивительно. .

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

использованная литература

1. Create Phone Number

2. Find the odd int

3. Who likes it?

4. Shortest Word

5. Sum of Digits / Digital Root