Hi
I’m trying to use the array.forEach() function in order to test whether all the numbers in the array are divisible by multiples of the largest number in the array.
Eg. arr = [4, 3, 2]
Check if multiples of 4 (4, 8, 12) are divisible by 3 and 2.
My code so far is this. I don’t know what to put in the while() condition though. Any ideas?
function smallestCommons(arr) {
//convert arguments into array
arr = Array.prototype.slice.call(arguments);
arr = arr[0];
//sort the array from highest to lowest number
function compareNumbers(a, b){
return b-a;
}
arr.sort(compareNumbers);
console.log(arr); //this is the lowest number in the original array
//fill the array with numbers between the lowest and highest numbers. first check how many numbers there will be in the whole array.
var inArr = arr[0]-arr[1]+1;
console.log("number of elements in new array: " + inArr);//this is the number of elements in the array (original elements + new elements)
var x;
for (x = 1; x < inArr; x++){
arr[x] = arr[x-1] - 1;
}
console.log("new array: " + arr); //the new array containing original elements + new elements
var mult = 1;
var common = 0;
function isDivisible(el){
common % el === 0;
}
do{
common = arr[0]*mult;
if (arr.every(isDivisible)){
return common;
}
mult++;
} while(???);
Initially I had an empty array, let`s call it commonArr. when the variable common is returned, i will push the value of common into that empty array. thus, while (commonArr.length === 0). The code was like this, but the result i got was “undefined”.
var mult = 1;
var common = 0;
var commonArr = [];
function isDivisible(el){
common % el === 0;
}
do{
console.log(commonArr);
common = arr[0]*mult;
if (arr.every(isDivisible)){
commonArr.push(common);
return common;
}
mult++;
} while(commonArr.length === 0);
I was able to take your solution with the correction I mentioned to you and remove a couple of unneeded variables, plus I simplified the while condition.
function smallestCommons(arr) {
arr.sort((a,b) => b-a);
for (var numbers = [], num = arr[0]; num >= arr[1]; num--)
numbers.push(num)
var mult = 1;
do{
var common = numbers[0]*mult;
if (numbers.every(number => common % number === 0))
return common;
mult++;
} while(true);
}
I just realized you didn’t have to convert the arguments into an array. I think I got confused with another challenge that asked us to do this… how do you know when you have to do that?
function smallestCommons(arr) {
var nums = [];
var total=1;
//Sort
if(arr[1]>arr[0]){
arr.sort(function(a,b){
return b-a;
});
}
//Array of numbers included
for(i=arr[0];i>=arr[1];i--){
nums.push(i);
}
//For every element of array
for(var z=nums.length-1;z>=0;z--){
//set total as the greatest number
if(z===(nums.length-1)){
total*=nums[z];
}
//if the upcoming number cant divide total then multiply
if(total%nums[z]!==0){
total*=nums[z];
}
}
return total;
}
smallestCommons([1,5]);
the last part of my code doesnt work. can anybody realize the error?