编写一个函数,它接受两个或多个数组,并以原始提供的数组的顺序返回一个新的惟一值数组。

我的思路是这样的:将所有传入的数组拼成一个新的数组,再对新数组进行遍历去重,但是出现了如下的问题:


    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会变成true,然后隐式转换成1,不知道怎么解决

                    result.splice(index,1);

                }

            }


        }

        return result;

    }


牧羊人nacy
浏览 574回答 2
2回答

森林海

应该把index=(result.indexOf(result[j],index+1))用括号括起来不然是把后面的布尔量赋值给index

回首忆惘然

逻辑运算符的优先级比赋值运算符高,所以while的条件里是先进行逻辑运算再赋值,所以 index 的值只可能为 true 或者 false,而为 false 时将会退出循环,所以每次读取 index 的值都为 true。你要的是先赋值再进行逻辑运算,所以改一下循环条件就行了:while((index=result.indexOf(result[j],index+1)) !== -1) {&nbsp; // ...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript