10 удивительных сокращений JavaScript

Привет всем 👋

Сегодня я хотел поделиться с вами 10 потрясающими сокращениями JavaScript, которые увеличат вашу скорость, помогая писать меньше кода и делать больше.

Давайте начнем!

1. Объединить массивы

От руки:

Обычно мы объединяем два массива, используя метод Array concat(). Метод concat() используется для объединения двух или более массивов. Этот метод не изменяет существующие массивы, а вместо этого возвращает новый массив. Вот простой пример:

let apples = ['🍎', '🍏'];
let fruits = ['🍉', '🍊', '🍇'].concat(apples);
console.log( fruits );
//=> ["🍉", "🍊", "🍇", "🍎", "🍏"]

Сокращение:

Мы можем немного сократить это, используя оператор расширения ES6 (...) следующим образом:

let apples = ['🍎', '🍏'];
let fruits = ['🍉', '🍊', '🍇', ...apples];  // <-- here
console.log( fruits );
//=> ["🍉", "🍊", "🍇", "🍎", "🍏"]

и мы все еще получаем тот же результат, что и раньше. 😃

2. Объединить массивы (но в начале)

От руки:

Допустим, мы хотим добавить все элементы из массива apples в начало массива fruits, а не в конец, как мы видели в последнем примере. Мы можем сделать это, используя Array.prototype.unshift() следующим образом:

let apples = ['🍎', '🍏'];
let fruits = ['🥭', '🍌', '🍒'];
// Add all items from apples onto fruits at start
Array.prototype.unshift.apply(fruits, apples)
console.log( fruits );
//=> ["🍎", "🍏", "🥭", "🍌", "🍒"]

Теперь два красных и зеленых яблока находятся в начале, а не в конце после слияния.

Сокращение:

Мы можем снова сократить этот длинный код, используя оператор расширения ES6 (...) следующим образом:

let apples = ['🍎', '🍏'];
let fruits = [...apples, '🥭', '🍌', '🍒'];  // <-- here
console.log( fruits );
//=> ["🍎", "🍏", "🥭", "🍌", "🍒"]

3. Массив клонов

От руки:

Мы можем легко клонировать массив, используя метод Array slice() следующим образом:

let fruits = ['🍉', '🍊', '🍇', '🍎'];
let cloneFruits = fruits.slice();
console.log( cloneFruits );
//=> ["🍉", "🍊", "🍇", "🍎"]

Сокращение:

Используя оператор расширения ES6 (...), мы можем клонировать такой массив:

let fruits = ['🍉', '🍊', '🍇', '🍎'];
let cloneFruits = [...fruits];  // <-- here
console.log( cloneFruits );
//=> ["🍉", "🍊", "🍇", "🍎"]

4. Деструктивное назначение

От руки:

При работе с массивами нам иногда нужно «распаковать» массивы в кучу переменных, например:

let apples = ['🍎', '🍏'];
let redApple = apples[0];
let greenApple = apples[1];
console.log( redApple );    //=> 🍎
console.log( greenApple );  //=> 🍏

Сокращение:

Мы можем добиться того же результата в одной строке, используя Деструктурирование присваивания следующим образом:

let apples = ['🍎', '🍏'];
let [redApple, greenApple] = apples;  // <-- here
console.log( redApple );    //=> 🍎
console.log( greenApple );  //=> 🍏

5. Шаблонные литералы

От руки:

Обычно, когда нам нужно добавить выражение к строке, мы делаем это так:

// Display name in between two strings
let name = 'xdwolf';
console.log('Hello, ' + name + '!');
//=> Hello, xdwolf!
// Add & Subtract two numbers
let num1 = 20;
let num2 = 10;
console.log('Sum = ' + (num1 + num2) + ' and Subtract = ' + (num1 - num2));
//=> Sum = 30 and Subtract = 10

Сокращение:

С шаблонными литералами мы можем использовать обратные кавычки (`), которые позволяют нам вставлять любое выражение в строку, заключая его в ${...} следующим образом:

// Display name in between two strings
let name = 'xdwolf';
console.log(`Hello, ${name}!`);  // <-- No need to use + var + anymore
//=> Hello, xdwolf!
// Add two numbers
let num1 = 20;
let num2 = 10;
console.log(`Sum = ${num1 + num2} and Subtract = ${num1 - num2}`);
//=> Sum = 30 and Subtract = 10

6. Для цикла

От руки:

Используя цикл for, мы можем пройтись по массиву следующим образом:

let fruits = ['🍉', '🍊', '🍇', '🍎'];
// Loop through each fruit
for (let index = 0; index < fruits.length; index++) { 
  console.log( fruits[index] );  // <-- get the fruit at current index
}
//=> 🍉
//=> 🍊
//=> 🍇
//=> 🍎

Сокращение:

Мы можем добиться того же результата, используя оператор for...of, но с очень небольшим количеством кода:

let fruits = ['🍉', '🍊', '🍇', '🍎'];
// Using for...of statement 
for (let fruit of fruits) {
  console.log( fruit );
}
//=> 🍉
//=> 🍊
//=> 🍇
//=> 🍎

7. Стрелочные функции

От руки:

Для перебора массива мы также можем использовать метод Array forEach(). Но нам нужно написать немного больше кода, меньше, чем самый распространенный цикл for, который мы видели выше, но все же немного больше, чем оператор for...of:

let fruits = ['🍉', '🍊', '🍇', '🍎'];
// Using forEach method
fruits.forEach(function(fruit){
  console.log( fruit );
});
//=> 🍉
//=> 🍊
//=> 🍇
//=> 🍎

Сокращение:

Но с помощью выражений стрелочных функций мы можем написать полный код цикла в одну строку следующим образом:

let fruits = ['🍉', '🍊', '🍇', '🍎'];
fruits.forEach(fruit => console.log( fruit ));  // <-- Magic ✨
//=> 🍉
//=> 🍊
//=> 🍇
//=> 🍎

В основном я использую цикл forEach со стрелочными функциями, но я хотел показать вам оба сокращения цикла: оператор for...of и цикл forEach. Так что вы можете использовать любой код, который вам нравится, исходя из ваших предпочтений. 😃

8. Найдите объект в массиве

От руки:

Чтобы найти объект в массиве объектов по одному из его свойств, мы обычно используем цикл for следующим образом:

let inventory = [
  {name: 'Bananas', quantity: 5},
  {name: 'Apples', quantity: 10},
  {name: 'Grapes', quantity: 2}
];
// Get the object with the name `Apples` inside the array
function getApples(arr, value) {
  for (let index = 0; index < arr.length; index++) {
// Check the value of this object property `name` is same as 'Apples'
    if (arr[index].name === 'Apples') {  //=> 🍎
// A match was found, return this object
      return arr[index];
    }
  }
}
let result = getApples(inventory);
console.log( result )
//=> { name: "Apples", quantity: 10 }

Сокращение:

Ух ты! Мы должны написать так много ранее, чтобы реализовать эту логику. Но с помощью метода Array find() и стрелочной функции => мы можем легко добиться этого в одной строке, например:

// Get the object with the name `Apples` inside the array
function getApples(arr, value) {
  return arr.find(obj => obj.name === 'Apples');  // <-- here
}
let result = getApples(inventory);
console.log( result )
//=> { name: "Apples", quantity: 10 }

9. Преобразование строки в целое число

От руки:

Функция parseInt() используется для разбора строки и возврата целого числа:

let num = parseInt("10")
console.log( num )         //=> 10
console.log( typeof num )  //=> "number"

Сокращение:

Мы можем добиться того же результата, добавив префикс + перед строкой следующим образом:

let num = +"10";
console.log( num )           //=> 10
console.log( typeof num )    //=> "number"
console.log( +"10" === 10 )  //=> true

10. Оценка короткого замыкания

От руки:

В основном оператор if-else используется, если нам нужно установить значение на основе другого значения, не являющегося ложным значением, например:

function getUserRole(role) {
  let userRole;
// If role is not falsy value
  // set `userRole` as passed `role` value
  if (role) {
    userRole = role;
  } else {
// else set the `userRole` as USER
    userRole = 'USER';
  }
return userRole;
}
console.log( getUserRole() )         //=> "USER"
console.log( getUserRole('ADMIN') )  //=> "ADMIN"

Сокращение:

Но, используя оценку короткого замыкания (||), мы можем сделать это в одной строке, например так:

function getUserRole(role) {
  return role || 'USER';  // <-- here
}
console.log( getUserRole() )         //=> "USER"
console.log( getUserRole('ADMIN') )  //=> "ADMIN"

По сути, expression1 || expression2 оценивается как короткое замыкание до истинного выражения. Таким образом, это все равно, что сказать, что если первая часть истинна, не беспокойтесь о вычислении остальной части выражения.

Наконец, я хотел бы закончить эту статью цитатой Джеффа Этвуда:

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