exception-io
exception-io

Reputation: 115

Finding all divisors of integer besides the int itself and 1, and putting result into array

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

Answers (2)

Kestone Dennis
Kestone Dennis

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

Maheer Ali
Maheer Ali

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

Related Questions