function smallestCommons(arr) { arr = arr.sort((a, b) => a > b) let a = arr[0] let b = arr[1] let searchingInProgress = true let start = 1 let next = 200 let numbers = [] let startIndex = a for (let i = 0 ; i < (b - a + 1) ; i++) { numbers.push([]) } while (searchingInProgress) { let multiplies = numbers.slice(0) //Creating 10x10 2D array of multiplies, each column represents a number in given range multiplies = multiplies.map( (number, index) => { let subMultiplies = [] for (let i = start ; i < next ; i++) { subMultiplies.push((index + startIndex) * i) } return subMultiplies }) //Searching through array of multiplies multiplies = multiplies.map( (multipliesSequence, index) => { //iterate through multiplies in sequence and returns only those which occur in every sequence return multipliesSequence.filter( multiply => { let alreadyExists = true //checks if multiply exists in every column for (let i = 0 ; i < multiplies.length ; i++) { alreadyExists = alreadyExists && multiplies[i].indexOf(multiply) !== -1 } return alreadyExists }) }) console.log(multiplies[0].length) if (multiplies[0].length !== 0) console.log(multiplies[0]) if (multiplies[0].length !== 0) return multiplies[0][0] start += next next += next } } smallestCommons([1,5]);