Я отфильтровал два массива и вернул похожие элементы - PullRequest
0 голосов
/ 03 августа 2020

Я получил решение Но я не могу понять функцию с именем 'isInSecondArray ()' и ее параметр 'item' . Как это работает.

function justCoolStuff(firstArray, secondArray) {

//The problem is underneath this comment.
      function isInSecondArray(item){
            for(let i = 0; i<secondArray.length; i++){
                  if (secondArray[i] === item){
                        return true
                  }
            }

            return false 
      }

    return firstArray.filter(isInSecondArray)
}


const coolStuff = ['gameboys', 'skateboards', 'backwards hats', 'fruit-by-the-foot', 'pogs', 'my room', 'temporary tattoos'];

const myStuff = [ 'rules', 'fruit-by-the-foot', 'wedgies', 'sweaters', 'skateboards', 'family-night', 'my room', 'braces', 'the information superhighway']; 
strong text
console.log(justCoolStuff(myStuff, coolStuff))

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

В этом примере, который вы опубликовали, у вас есть функция, определенная внутри функции. Таким образом, эта функция (isInSecondArray()) может выполняться только внутри функции justcoolStuff().

Итак, в последней строке, когда мы запускаем функцию justCoolStuff с myStuff, переданным в качестве первого массива, и coolStuff передается в качестве второго массива, происходит следующее:

  • функция isInSecondArray определена и настроена так, что она готова к выполнению, если она будет вызвана
  • затем мы запускаем метод фильтрации для firstArray, передавая метод isInSecondArray (определенный ранее в функции) в качестве аргумента.

filter - это метод JS, который работает с Массивы. Чтобы использовать его, вы передаете ему функцию обратного вызова. См. документацию MDN для хорошего простого примера, который использует стрелочную функцию.

Таким образом, filter выполняет итерацию по элементам в myStuff (поскольку это первый из двух переданных массивов) . Для каждого элемента в myStuff запускается функция isInSecondArray. isInSecondArray выполняет итерацию по всем элементам в secondArray, и если один из них совпадает с элементом myStuff, который мы проверяем, тогда он возвращает true.

Когда функция обратного вызова передана в filter возвращает истину, тогда этот элемент может быть возвращен как часть окончательного массива / объекта. Когда функция обратного вызова (например, isInSecondArray) возвращает false, этот элемент не возвращается как часть окончательного массива / объекта.

Надеюсь, это понятно. Здесь важно знать, что filter принимает функцию (обратного вызова) и в зависимости от того, что возвращает функция обратного вызова, будет определять, какие значения будут выводиться как часть окончательного возвращенного массива.

0 голосов
/ 03 августа 2020

Ваш код сравнивает два массива - конкретно, он сохраняет только те элементы первого массива, которые содержит второй массив.

Для этого ваша функция justCoolStuff принимает оба массива. Затем он объявляет функцию с именем isInSecondArray. Затем эта функция передается в вызов функции фильтра в строке firstArray.filter(isInSecondArray).

Функция filter выполняет итерацию по firstArray. Во время итерации он передает каждый элемент из firstArray в функцию isInSecondArray. Например, если firstArray содержит пять элементов, то isInSecondArray будет выполняться пять раз, по одному разу для каждого элемента. На каждой итерации функция isInSecondArray выполняет итерацию по второму массиву и сравнивает элемент из первого массива с текущим элементом из второго массива. filter затем возвращает новый массив только с теми элементами, для которых isInSecondArray вернул истинное значение.

Другими словами, у вас есть два цикла, один неявный в filter, другой явный в for л oop. for l oop вложен в filter l oop. Если в ваших массивах пять и четыре элемента, соответственно, всего будет 4 * 5 = 20 итераций. (Это число можно было бы значительно уменьшить, если бы вы использовали наборы вместо массивов, но, надо признать, это не то, о чем вы спрашивали.)

ссылка на функцию фильтра

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