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

Рейтинг: 1Ответов: 1Опубликовано: 09.02.2023

Как решить такую задачку. Тут надо использовать оператор (...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))

Ответы

▲ 3Принят

Действия:

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

Решение можно сократить, попробуйте это самостоятельно, используя функцию 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))