# Tips in how to sort out this algorithm

I am trying to solve this problem, you have to return an array of the items that are in both arrays given:

For example

``````console.log(findMatches([4,9,5], [9,4,9,8,4])) // returns [4,9] because 4 and 9 are in both arrays
``````

My code already solves this first test, but the issue is, I have to return also the numbers x amount of times, of in other words *"Each element in the result should appear as many times as it shows in both arrays."

For example in

``````console.log(findMatches([1,2,2,1], [2,2])) // should return [2,2] because it is repetated in both arrays two times!!
``````

That´s what i need to do now. Because this last test i don´t pass it. My function returns just [2] because it doesn´t count yet how many times is repeated the number. This is what I don´t know how to do.

``````function match(arr1, arr2){

let matchesArr = [];

arr1.map((item) => {
return arr2.map((item2) => {
if (item === item2){
matchesArr.push(item)
}
})
})
let filtered = [...new Set(matchesArr)]

return filtered
}

console.log(match([1,2,2,1], [2,2])); // WRONG  should return [2,2], returns [2]
console.log(match([4,9,5], [9,4,9,8,4])); // CORRECT should return [4,9], returns [4,9]
``````

A Set can only have unique values…

Description
A value in the Set may only occur once; it is unique in the Set’s collection.

I see, but I was already thinking to do add the repeated values afterwards.

The way you are using map is horrible.
The way you are using it, I should be `forEach()` method.

Considering that a set can only have each value one time, would the array before making it a set work?

You could filter the arrays and then use concat. To remove repetition, create a new Set

Just to be clear about something, would I be correct in assuming the following should return [4, 9, 9]?

``````console.log(match([4,9,5,9], [9,4,9,8,4]));
``````

Looks to me like you’re not using `map` correctly. Map is used to convert every element of the array into something else. For example, if I have an array of numbers `[1, 2, 3, 4]` and I need to know what all those numbers are squared, I would use map on it:
`[1, 2, 3, 4].map(num => num ** 2); // returns [1, 4, 9, 16]`. If you just want to do something for every element in the array without returning a new array, you can use `forEach` as @ilenia suggested, or a simple for loop.

When I need to count how many times something appears in the array I like to make an object to store the count of each item. It eliminates the need to loop through arrays multiple times.