В фрагменте кода, о котором вы спрашиваете, левая сторона сильно отличается от правой. Давайте разберемся с этим:
.map(([key, value]) => [key, value * 2])
Сначала map
принимает функцию в качестве параметра. Здесь функция, по сути, делает это:
(entry) => {
const key = entry[0];
const value = entry[1];
const modified_entry = [ key, value * 2 ];
return modified_entry;
}
Более короткий способ записи:
(entry) => [ entry[0], entry[1] * 2 ]
Это работает так же, потому что без фигурных скобок вокруг тела функции он использует значение в качестве возвращаемого значения.
Теперь запрашиваемый код не использует единственную переменную для входного параметра функции. Это единственный параметр, но он устанавливает 2 переменные, используя то, что называется deconstruction
или destructuring
. Это функция в Javascript, которая позволяет простым способом разбить объект на несколько переменных. Например, посмотрите на это:
var entry = [ 'meat', 1]
var [ item, price ] = entry
// now item is 'meat', and price is 1, which is nicer than having to do this:
item = entry[0]
price = entry[1]
Итак, возвращаясь к вашему коду, они выразили entry
как [key,value]
, чтобы их можно было легко использовать в функции и с правой стороны. из =>
у нас есть возвращаемое значение, которое является новым массивом с удвоенной ценой.
Помните, что слева мы разбиваем объект на новые переменные, которые получают присвоенные значения, а справа сторона, мы создаем новый объект Array, который возвращается. Это может немного сбивать с толку, потому что они оба имеют одинаковую форму, похожую на массив в квадратных скобках.
Обратите также внимание, что деконструкция работает как с объектами, так и с массивами, поэтому это также допустимый код:
var obj = { a:1, b:2, c:3 }
var { a, c } = obj
console.log(a,c) // will print "1 3"
Деконструкция объекта позволяет вам извлечь из объекта только те части, которые вы хотите, и создать переменные, названные в честь ключа. Обратите внимание, что мы не запрашивали b
, поэтому нет переменной b
- она просто игнорируется.