что делают квадратные скобки в параметре array.map? - PullRequest
2 голосов
/ 16 января 2020

не уверен, что происходит в .map(([key, value]) => [key, value * 2]) У меня есть общее представление о том, что квадратные скобки делают с этим параметром. Но кто-то может уточнить правила синтаксиса или объяснить, что происходит?

Вот мое убеждение в том, как работает код:

  1. Object.entries преобразует цены объекта в массив. возвращает что-то вроде [[banana, 1], [orange, 2], [meat, 4]]
  2. map - это метод массива, и функция удваивает цены каждого элемента.
  3. Шаганы затем возвращаются обратно в объект.

, если карта проходит через элементы; Было бы разумнее написать .map((item) => [item[0], item[1] * 2])

, проходя урок из javascript .info

let prices = {
  banana: 1,
  orange: 2,
  meat: 4,
};

let doublePrices = Object.fromEntries(
  // convert to array, map, and then fromEntries gives back the object
  Object.entries(prices).map(([key, value]) => [key, value * 2])
);

console.log(doublePrices.meat); // 8

1 Ответ

2 голосов
/ 17 января 2020

В фрагменте кода, о котором вы спрашиваете, левая сторона сильно отличается от правой. Давайте разберемся с этим:

.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 - она ​​просто игнорируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...