鍍金池/ 問答/HTML/ 編寫一個(gè)函數(shù),它接受兩個(gè)或多個(gè)數(shù)組,并以原始提供的數(shù)組的順序返回一個(gè)新的惟一值數(shù)

編寫一個(gè)函數(shù),它接受兩個(gè)或多個(gè)數(shù)組,并以原始提供的數(shù)組的順序返回一個(gè)新的惟一值數(shù)組。

我的思路是這樣的:將所有傳入的數(shù)組拼成一個(gè)新的數(shù)組,再對新數(shù)組進(jìn)行遍歷去重,但是出現(xiàn)了如下的問題:

    function tick(){
        var result=[];
        for(var i=0;i<arguments.length;i++){
            result=result.concat(arguments[i]);
        }
        for(var j=0;j<result.length;j++){
            var index=-1;
            var flag=true;
            while(index=(result.indexOf(result[j],index+1))!==-1){
                if(flag){
                    flag=false;
                    continue;
                }else{//index會(huì)變成true,然后隱式轉(zhuǎn)換成1,不知道怎么解決
                    result.splice(index,1);
                }
            }

        }
        return result;
    }
回答
編輯回答
熟稔

應(yīng)該把
index=(result.indexOf(result[j],index+1))
用括號括起來
不然是把后面的布爾量賦值給index

2017年9月5日 09:33
編輯回答
法克魷

邏輯運(yùn)算符的優(yōu)先級比賦值運(yùn)算符高,所以while的條件里是先進(jìn)行邏輯運(yùn)算再賦值,所以 index 的值只可能為 true 或者 false,而為 false 時(shí)將會(huì)退出循環(huán),所以每次讀取 index 的值都為 true

你要的是先賦值再進(jìn)行邏輯運(yùn)算,所以改一下循環(huán)條件就行了:

while((index=result.indexOf(result[j],index+1)) !== -1) {
  // ...
}
2018年2月27日 22:03