为了检查我的JS级别,我最近得到了这样一个任务:
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]);
}
我的回答是:“这是不可能的”。因为变种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]
附上undefined。 出于好奇,我尝试了变体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]]
哪个变得更糟。 至于我,理想的解决方案是三:
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]
但这是不允许的。 所以,我的问题是: 1)能否按照要求完全解决? 2)为什么undefined会出现在变体ONE中? 3)为什么变体TWO如此冗长?