完成如果状态

时间:2017-04-24 10:00:36

标签: javascript arrays if-statement slice

为了检查我的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如此冗长?

0 个答案:

没有答案