Cбор части аргументов функции, оператор rest

Как решить такую задачку. Тут надо использовать оператор (...rest), но как его применить?

Функция findMatches() принимает произвольное количество аргументов. Первым аргументом всегда будет массив чисел, а остальные аргументы будут просто числами.

Дополни код функции так, чтобы она возвращала новый массив matches, в котором будут только те аргументы, начиная со второго, которые есть в массиве первого аргумента.

Например, findMatches([1, 2, 3, 4, 5], 1, 8, 2, 7) должна вернуть массив [1, 2], потому что только они есть в массиве первого аргумента.

Вызов findMatches([4, 89, 17, 36, 2], 8, 17, 89, 27, 2) возвращает [17, 89, 2]

Вызов findMatches([10, 24, 41, 6, 9, 19], 24, 11, 9, 23, 41) возвращает [24, 9, 41]

Вызов findMatches([63, 11, 8, 29], 4, 7, 16) возвращает []

function findMatches() {
  const matches = []; 

  return matches;
}
console.log(findMatches([1, 2, 3, 4, 5], 1, 8, 2, 7))
console.log(findMatches([4, 89, 17, 36, 2], 8, 17, 89, 27, 2))

Ответы (1 шт):

Автор решения: gil9red

Действия:

  • Раз, первый аргумент - массив, а последующие - переменное количество аргументов, то второй аргумент объявляем через ...
  • Остается перебрать второй аргумент, оставив только те элементы, которые есть в первом

Решение можно сократить, попробуйте это самостоятельно, используя функцию filter

Пример:

function findMatches(arr1, ...arr2) {
    const matches = []; 
    for (let x of arr2) {
        if (arr1.includes(x)) {
            matches.push(x);
        }
    }
    return matches;
}
console.log(findMatches([1, 2, 3, 4, 5], 1, 8, 2, 7))
console.log(findMatches([4, 89, 17, 36, 2], 8, 17, 89, 27, 2))

→ Ссылка