2016-12-02 95 views
1
var answer1=arguments[0]; 
var value1=arguments[1]; 
var value2=arguments[2]; 
var finalAnswer=[]; 

console.log(answer1); 
console.log(value1); 
console.log(value2); 

for (var i=0;i<=answer1.length-1;i++){ 
    if (answer1[i]===value2 || answer1[i]===value1){ 
     finalAnswer= answer1.splice(i,1); 
     finalAnswer.pop(); 
    } 
} 

console.log(answer1); 
console.log(finalAnswer); 

destroyer([1, 2, 3, 1, 2, 3], 2, 3); 

嗨我試過這個尋找和摧毀挑戰,這是搜索毀滅者的論點中給出的參數對象,並刪除它們。 但我的if語句無法正常工作。它沒有檢查或選項。它根本不檢查「answer1 [i] === value2」選項的比較。或條件在if語句不能正常工作

答案應該是這樣的:[1,1] 但我得到的答案是:[1,3,1,3]。它不是刪除3. 任何建議爲什麼?

+3

狀況似乎不錯,但是,這個問題是你正在修改你正在循環的數組。 – nikhil

+2

或向後循環陣列,因此拼接不會影響序列。 – RobG

回答

0

試試這個週期:

answer1.forEach(function(el){ 
    if (el !== value1 && el !== value2) finalAnswer.push(el); 
}); 

總量將是這樣的:

function destroyer() { 
    var answer1=arguments[0]; 
    var value1=arguments[1]; 
    var value2=arguments[2];  
    var finalAnswer=[]; 

    answer1.forEach(function(el){ 
     if (el !== value1 && el !== value2) finalAnswer.push(el); 
    }); 

    console.log(finalAnswer); 
} 

destroyer([1, 2, 3, 1, 2, 3], 2, 3); 
+1

或者您可以使用['filter'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) – 4castle

+1

對於這種方法,我認爲* filter *是更合適:'finalAnswer = answer.filter(el => el!== value1 && el!== value2)'。 :-) Dang,4castle ... – RobG

0

如果條件正常工作,它應該。什麼導致你的結果出錯是因爲for循環沒有考慮到你正在迭代的數組所做的改變。

2

Array.filter試試這個

function destroyer(){ 
    var answer1=arguments[0]; 
    var value1=arguments[1]; 
    var value2=arguments[2]; 

    answer1 = answer1.filter(function(val){ 
     return val!==value1 && val!==value2; 
    }); 

    console.log('answr1',answer1); 

    } 


destroyer([1, 2, 3, 1, 2, 3], 2,3);