неопределенный параметр в методе map () - PullRequest
0 голосов
/ 15 апреля 2020

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

const array1 = [1, 4, 9, 16];

// pass a function to map
const map1 = array1.map(x => x * 2);

console.log(map1);
// expected output: Array [2, 8, 18, 32]

Ответы [ 4 ]

0 голосов
/ 15 апреля 2020

map имеет обратный вызов и имеет три аргумента. Неважно, что вы называете эти аргументы. Имя аргументов не имеет значения, вы можете назвать их foo a, b, cat, world, dude, et c.

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

Вторым параметром является индекс. Третий параметр - это массив, который он зацикливает.

function doubleIt(x, index) {
  console.log(x, index)
  return x * 2
}
function tripeleIt(foo, index) { 
  console.log(foo, index)
  return foo * 3
}

var myArray = [1,2,3,4]

console.log(myArray.map(doubleIt))
console.log(myArray.map(tripeleIt))

Под капотом карта выглядит так (я назвал ее xmap, чтобы она могла работать)

Array.prototype.xmap = function (callback) {
  var theArray = this;
  var theResult = [];
  for (var index = 0; index < theArray.length; index++) {
    var indexValue = theArray[index];
    theResult[index] = callback(indexValue, index, theArray)
    //                      ^^^^^^^^^^ Where the first argument comes from                
  }
  return theResult;
}

var x = [1,2,3,4].xmap(x => x * 2)
console.log(x)
0 голосов
/ 15 апреля 2020

Вы можете прочитать здесь о map функции.

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

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

function foo(x) {
    return x*2;
}

или как это:

(x) => x*2;

Вторая форма - это функция стрелки, которая имеет без имени и может быть определен в строке. Он получает аргумент x и возвращает x*2, точно так же, как функция foo.

Так map применяет эту функцию foo к каждому значению array1, поэтому x в этом случае это значение в array1.

Вместо записи:

array1.map(x=>x*2);

Вы можете написать:

for(let i in array1) {
    array1[i] = foo(array[i]);
}
0 голосов
/ 15 апреля 2020

Вам нужно потратить некоторое время на понимание структуры языка, документация MDN объясняет это достаточно хорошо, функция «map» выполняет / выполняет итерацию каждого элемента в «array1», где «x» служит в качестве текущее значение / параметр для каждого l oop, запускает выражение с текущим значением и создает новый массив, содержащий вычисления, выполненные каждым итерируемым элементом.

Надеюсь, это объяснение поможет вам лучше понять его, вы можно читать дальше для большей глубины.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

0 голосов
/ 15 апреля 2020

Документация по функциям стрелки MDN достаточно хорошо описывает это.

x => x * 2

- сокращение от

function(x) {
    return x * 2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...