Задать вопрос
@hryashik

По какому принципу этот аргумент передается в функцию?

Привет, имеется массив с объектами. Пытаюсь построить функцию, которая фильтрует элементы массива (по свойству объекта) и возвращает массив с этими объектами. Объясните принцип передачи такого аргумента.
let arr = {
    object1 = {
        name: "Adam",
        year: 1997
    }, object2 = {
        name: "John",
        year: 2000
    }, object3 = {
        name: "Conor",
        year: 2001
    }, object4 = {
        name: "Adam",
        year: 2000
    }
}

function filter(array, test) {
    let result = [];
    for (let element of array) {
        if (test(element)) {            // Объясните как работает эта строчка
            result.push(element);
        }
    }
    return result;
}
console.log(filter(arr, a => a.name == "Adam"));   // И тут

Объясните как ведет себя машина конкретно во втором аргументе. Откуда берется эта a, и почему вместо нее можно подставить что угодно и оно будет работать? Например: script=>script.name и т.д.
  • Вопрос задан
  • 102 просмотра
Подписаться 1 Простой Комментировать
Решение пользователя Роман К ответам на вопрос (3)
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
filter(
   arr,  // первый аргумент - array (объект(не массив) с фильтруемыми вложенными объектами)
   a => a.name == "Adam" // второй аргумент -  test (функция)
)


в результате внутри
function filter(array, test) { ... }

аргументом test станет переданная стрелочная функция, как если бы мы написали:
const test = (a) => {
   return a.name == "Adam" 
}


для понимания приведу почти аналог этой функции в обычной нотации
function test(a){
   return a.name == "Adam"  // стравнивает a.name со строкой "Adam", возвращаетекгу true равны и false если не равны
}


далее:
if (test(element)) {            // проверяем равен ли name элемента строке "Adam"
      result.push(element); // если равен, то добавляем в результирующий массив
}
Ответ написан