lundi 24 avril 2017

Complete if statemet

In order to check my JS level, I was given such a task recently:

var array1 = [20, 50, 12, 1, 2],
    array2 = [];
for(var i = 0, length = array1.length; i < length; i++) {
    if(array1[i] === 12){
     // Complete if statement to make array2 equal to [20, 50, 1, 2]
      };
     array2.push(array1[i]);
}

My answer was:"It's impossible". Because variant ONE:

var array1 = [20, 50, 12, 1, 2],
    array2 = [];
for(var i = 0, length = array1.length; i < length; i++) {
    if(array1[i] === 12){
     array1 = [...array1.slice(0,i),  ...array1.slice(i+1)];
      };
     array2.push(array1[i]);
}
console.log(array2); // [20, 50, 1, 2, undefined]

attaches undefined. Out of curiosity, I tried variant TWO:

var array1 = [20, 50, 12, 1, 2],
    array2 = [];
for(var i = 0, length = array1.length; i < length; i++) {
    if(array1[i] === 12){
     array1 = [...array1.slice(0,i),  ...array1.slice(i+1)];
     };
     array2.push(array1);
}
console.log(array2); //[[20, 50, 12, 1, 2], [circular object Array], [20, 50, 1, 2], [circular object Array], [circular object Array]]

Which turned to be even worse. As for me, the ideal solution would be THREE:

var array1 = [20, 50, 12, 1, 2],
    array2 = [];
for(var i = 0, length = array1.length; i < length; i++) {
    if(array1[i] === 12){
     array2 = [...array1.slice(0,i),  ...array1.slice(i+1)];
     };
    }
console.log(array2); // [20, 50, 1, 2]

But it's not allowed. So, my questions are: 1) Could it be solved as exactly as asked? 2) Why undefined shows up in variant ONE? 3) Why variant TWO is so verbose?

Aucun commentaire:

Enregistrer un commentaire