Reputation: 115
So I've gotten the function to return the divisors beside 1 and itself, but my loop is still adding empty array elements since it increments the int
argument. Can someone see where I'm going wrong?
function divisors(integer) {
var result = [];
for(let i = 0; i < integer; i++) {
if(i !== 1 && i !== integer && integer % i == 0) {
result[i] = i;
}
}
return result;
};
console.log(divisors(12)); // returns array length of 7, 3 emtpy slot and 2, 3, 4, 6 ??
Upvotes: 1
Views: 2150
Reputation: 25
Try this:
function divisors(integer) {
var divisors = [];
for (var i = 2; i < integer - 1; i++){
if (integer % i === 0) divisors.push(i);
}
if (divisors.length === 0) return '' + integer + ' is prime';
return divisors;
}
Upvotes: 0
Reputation: 36564
You should add the elements using push()
function divisors(integer) {
var result = [];
for(let i = 0; i < integer; i++) {
if(i !== 1 && i !== integer && integer % i == 0) {
result.push(i)
}
}
return result;
};
console.log(divisors(12));
A better way is to start the loop from 2
. And no need to check i !== integer
because i
will be always less than integer.
function divisors(integer) {
var result = [];
for(let i = 2; i < integer; i++) {
if(integer % i == 0) {
result.push(i)
}
}
return result;
};
console.log(divisors(12));
A more cleaner on-liner will be using filter()
const divisors = num => [...Array(num)]
.map((x,i) => i)
.filter(x => num % x === 0).slice(1)
console.log(divisors(12));
Upvotes: 5