"В целях обучения и прокачки, решите это упражнение с помощью вложенных циклов" - если бы не эта фраза я прошёл бы мимо :) Я, в целях прокачки, сказал бы решить задачу без вложенных циклов, т.к. с вложенными циклами (по-моему) очевидно
Могу предложить 2 способа решить это:
С помощью набора и счётчика:
Создаём набор из уникальных элементов первого массива. Это позволяет нам не тратя время на поиски элемента и сразу узнать находится ли там искомый элемент или нет
Если находится, то увеличиваем счётчик на 1 и в конце его возвращаем
const nums1 = [1, 2, 3, 2, 4, 5, 6, 2];
const nums2 = [4, 6, 3, 2, 7, 4, 6, 1, 8];
function countUniqElements(arr1, arr2) {
let count = 0;
const arr1UniqSet = new Set(_.uniq(arr1));
const arr2Uniq = _.uniq(arr2);
for (const el of arr2Uniq) {
if (arr1UniqSet.has(el)) ++count;
}
return count;
}
console.log(countUniqElements(nums1, nums2));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
1.1. Однострочный вариант первого способа (reduce)
const nums1 = [1, 2, 3, 2, 4, 5, 6, 2];
const nums2 = [4, 6, 3, 2, 7, 4, 6, 1, 8];
function countUniqElements(arr1, arr2) {
return _.uniq(arr2)
.reduce(
(data, el) => (data.count += data.arr1UniqSet.has(el), data),
{arr1UniqSet: new Set(_.uniq(arr1)), count: 0}
).count;
}
console.log(countUniqElements(nums1, nums2));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
Создаём набора и метода filter
Создаём набор из уникальных элементов первого массива
Во втором массиве оставляем только те элементы, которые находятся в наборе
const nums1 = [1, 2, 3, 2, 4, 5, 6, 2];
const nums2 = [4, 6, 3, 2, 7, 4, 6, 1, 8];
function countUniqElements(arr1, arr2) {
const arr1UniqSet = new Set(_.uniq(arr1));
const arr2Uniq = _.uniq(arr2);
const uniqueInBothArr = arr2Uniq.filter(el => arr1UniqSet.has(el));
return uniqueInBothArr.length;
}
console.log(countUniqElements(nums1, nums2));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
2.1. Почти однострочный вариант второго способа
const nums1 = [1, 2, 3, 2, 4, 5, 6, 2];
const nums2 = [4, 6, 3, 2, 7, 4, 6, 1, 8];
function countUniqElements(arr1, arr2) {
const arr1UniqSet = new Set(_.uniq(arr1));
return _.uniq(arr2).filter(el => arr1UniqSet.has(el)).length;
}
console.log(countUniqElements(nums1, nums2));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>