В наших повседневных задачах мы пишем такие функции, как сортировка, поиск, поиск уникальных значений, передача параметров, обмен значениями и т. д., поэтому здесь я собрал список своих советов по сокращению!
JavaScript — действительно отличный язык для изучения и использования. Для одной и той же проблемы может быть несколько способов прийти к одному и тому же решению. В этой статье мы обсудим только самые быстрые из них.
Эти методы вам обязательно помогут:
Большинство этих хаков JavaScript используют ECMAScript6 (ES2015) и более поздние технологии, хотя последней версией является ECMAScript11 (ES2020).
==Примечание==: Все приведенные ниже советы были протестированы на консоли Google Chrome.
Мы можем инициализировать массив определенного размера, используя значение по умолчанию (например, «», null или 0). Возможно, вы уже используете их для одномерных массивов, но как инициализировать двумерный массив/матрицу?
const array = Array(5).fill(''); // Вывод(5) ["", "", "", "", ""] const матрица = Array(5).fill(0).map(()=>Array(5).fill(0)); // Вывод(5) [Массив(5), Массив(5), Массив(5), Массив(5), Массив(5)] 0: (5) [0, 0, 0, 0, 0] 1: (5) [0, 0, 0, 0, 0] 2: (5) [0, 0, 0, 0, 0] 3: (5) [0, 0, 0, 0, 0] 4: (5) [0, 0, 0, 0, 0] длина: 5
Мы должны использовать метод reduce
, чтобы быстро найти основные математические операции.
const array = [5,4,7,8,9,2]
array.reduce((a,b) => a+b); // Вывод:
array.reduce((a,b) => a>b?a:b); // Вывод:
array.reduce((a,b) => a<b?a:b); // Выход: 2
У нас есть встроенные методы sort()
reverse()
для сортировки строк, но как насчет массивов чисел или объектов?
Давайте рассмотрим методы сортировки чисел и объектов по возрастанию и убыванию.
const stringArr = ["Джо", "Капил", "Стив", "Маск"] строкаArr.sort(); // Output(4) ["Джо", "Капил", "Маск", "Стив"] stringArr.reverse(); // Вывод (4) ["Стив", "Маск", "Капил", "Джо"]
const array = [40, 100, 1, 5, 25, 10]; array.sort((a,b) => ab); // Вывод(6) [1, 5, 10, 25, 40, 100] array.sort((a,b) => ba); // Вывод (6) [100, 40, 25, 10, 5, 1]
const objectArr = [ { first_name: 'Лазсло', Last_name: 'Джамф' }, { first_name: 'Свинья', Last_name: 'Бодин' }, { first_name: 'Пират', Last_name: 'Прентис' } ]; objectArr.sort((a, b) => a.last_name.localeCompare(b.last_name)); // Вывод(3) [{…}, {…}, {…}] 0: {first_name: "Свинья", Last_name: "Бодин"} 1: {first_name: "Лазсло", Last_name: "Джамф"} 2: {first_name: «Пират», Last_name: «Прентис»} длина: 3
Ложные значения, такие как 0
, undefined
, null
, false
, ""
, ''
можно легко опустить с помощью
const array = [3, 0, 6, 7, '' , ЛОЖЬ]; array.filter(логическое значение); // Вывод (3) [3, 6, 7]
Если вы хотите уменьшить количество вложенных if...else или переключить регистры, вы можете просто использовать базовые логические операторы AND/OR
.
функция doSomething(arg1){ аргумент1 = аргумент1 || 10; // Установите для arg1 значение 10 по умолчанию, если оно еще не установлено return arg1; } пусть фу = 10; foo === 10 && doSomething(); // то же самое, что и (foo == 10) then doSomething(); // Выход: 10 Фу === 5 || сделатьЧто-то(); // то же самое, что и (foo != 5) then doSomething(); // Вывод: 10
Возможно, вы использовали indexOf()
с циклом for, который возвращает первый найденный индекс, или более новый includes()
, который возвращает логическое значение true/false из массива для поиска Out/remove. дубликаты. Здесь у нас есть два более быстрых метода.
константный массив = [5,4,7,8,9,2,7,5]; array.filter((item,idx,arr) => arr.indexOf(item) === idx); // или const nonUnique = [...новый набор (массив)]; // Вывод: [5, 4, 7, 8, 9, 2]
В большинстве случаев вам нужно решить проблему, создав объект счетчика или карту, которая отслеживает переменные как ключи и отслеживать его частоту/появление как значение.
пусть строка = 'капилалипак'; константная таблица = {}; for(let char of string) { таблица[символ]=таблица[символ]+1 || 1; } // Вывод {k: 2, a: 3, p: 2, i: 2, l: 2}
и
const countMap = new Map(); for (пусть я = 0; я <string.length; i++) { если (countMap.has(string[i])) { countMap.set(string[i], countMap.get(string[i]) + 1); } еще { countMap.set(строка [i], 1); } } // Вывод Map(5) {"k" => 2, "a" => 3, "p" => 2, "i" => 2, "l" => 2}
вы можете избежать вложенных условных операторов, используя тернарный оператор if…elseif…elseif.
функция Fever(temp) { температура возврата > 97 ? «Обратитесь к врачу!» : temp < 97 ? 'Выходи и играй!' : temp === 97 ? 'Отдохни!'; } // Выход Fever(97): «Отдохни!» Fever(100): «Посетите доктора!»
for
и for..in
, которые по умолчанию дают индекс, но вы можете использовать arr[index].for..in
также принимает нечисловые значения, поэтому избегайте этого.forEach
, for...of
напрямую получает элементы.forEach
также может дать вам индекс, но for...of
не может.for
и for...of
учитывайте дыры в массиве, но не остальные 2.Обычно в повседневных задачах нам необходимо объединить несколько объектов.
константный пользователь = { название: 'Капил Рагуванши', пол: 'Мужской' }; константный колледж = { начальная школа: «Начальная школа Мани», среднее: «Средняя школа для девочек» }; константные навыки = { программирование: «Экстрим», плавание: «Среднее», сон: «Профи» }; const summary = {...пользователь, ...колледж, ...навыки}; // Выходной пол: "Мужской" название: «Капил Рагуванши» начальная школа: «Начальная школа Мани» программирование: «Экстрим» средняя школа: «Ласская средняя школа» сон: «Профи» плавание: «Среднее»
Выражения со стрелочными функциями являются компактной альтернативой традиционным функциональным выражениям, но имеют ограничения и не могут использоваться во всех ситуациях. Поскольку они имеют лексическую область видимости (родительскую область действия) и не имеют собственной области действия, this
arguments
относятся к среде, в которой они определены.
константный человек = { название: 'Капил', SayName() { вернуть это.имя; } } person.sayName(); // Выводим «Капил»,
но
const person = { название: 'Капил', SayName : () => { вернуть это.имя; } } person.sayName(); // Вывод ""
связывание Необязательное связывание? Останавливает вычисление, если значение предшествует ?. имеет неопределенное или нулевое значение и возвращает
неопределенное значение. константный пользователь = { сотрудник: { название: "Капил" } }; пользователь.сотрудник?.имя; // Вывод: "Капил" пользователь.employ?.имя; // Вывод: не определено user.employ.name // Вывод: VM21616:1 Uncaught TypeError: невозможно прочитать имя свойства неопределенного значения
Используйте встроенный метод Math.random()
для шифрования массива.
константный список = [1, 2, 3, 4, 5, 6, 7, 8, 9]; list.sort(() => { вернуть Math.random() - 0,5; }); // Вывод(9) [2, 5, 1, 6, 9, 8, 4, 3, 7] // Вызовем его еще раз (9) [4, 1, 7, 5, 3, 8, 2, 9, 6]
Оператор слияния с нулевым значением (??) — это логический оператор, когда его левый операнд пуст или не определен, возвращает свой правый операнд, в противном случае возвращает левый операнд.
const foo = null ?? 'моя школа'; // Вывод: «моя школа» константа баз = 0 ?? 42; // Выход: 0
Эти загадочные 3 точки ...
могут отдыхать или распространяться! ?
функция myFun(a, b, ...manyMoreArgs) { вернуть аргументы.длина; } myFun("один", "два", "три", "четыре", "пять", "шесть"); // Вывод: 6
и
const parts = ['плечи', 'колени']; const Lyrics = ['голова', ...части, 'и', 'пальцы ног']; тексты песен; //выход: (5) ["голова", "плечи", "колени", "и", "пальцы ног"]
const search = (arr, low=0,high=arr.length-1) => { возврат высокий; } поиск([1,2,3,4,5]); // Выход: 4
При решении задачи мы можем использовать некоторые встроенные методы, такие как .toPrecision()
или .toFixed()
для реализации множества вспомогательных функций.
константное число = 10; число.toString(2); // Вывод: "1010" число.toString(16); // Вывод: "а" число.toString(8); // Вывод: «12»
let a = 5; пусть б = 8; [а,б] = [б,а] [а,б] // Output(2) [8, 5]
. Это не совсем краткий совет, но он даст вам хорошее представление о том, как использовать строки.
функция checkPalindrome(str) { return str == str.split('').reverse().join(''); } checkPalindrome('наман'); // Вывод: true
с помощью Object.entries(), Object.keys() и Object.values(). const obj = { а: 1, б: 2, с: 3}; Object.entries(obj); // Вывод(3) [Массив(2), Массив(2), Массив(2)] 0:(2)["а",1] 1:(2)["б",2] 2: (2) ["в", 3] длина: 3 Object.keys(obj); (3) ["а", "б", "в"] Object.values(obj); (3) [1, 2, 3]