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