先说下解题思路:
第一:遍历数组可能遇到的数据有:
基本数据类型:string,number,boolean,null,undefined.
还有function , Object,Array
第二:首先想到的是使用typeOf,使用之后剩余的是null , Object,Array
第三:判断对象的属于哪一类可以使用instanceof,但是instanceof有一个缺陷,那就是原生构造函数要与对象在同一个全局作用域内。
第四:可以使用Object.prototype.toString.call()判断对象类型
这样就解决了所有的问题了,可以开始动工搬砖了,哈哈
纯属周末当娱乐写的,还有疏漏的欢迎指出,哈哈
function distinct(list){
var list = list;
var reset=[];
function mainFun(array){ //将功能用函数封装
for(let i=0,len=array.length;i<len;i++){
if(typeof array[i] == 'object'){ //Object,Array,null
if(Object.prototype.toString.call(array[i])=="[object Array]"){ //数组 Arry
mainFun(array[i]);
}else if(Object.prototype.toString.call(array[i])=="[object Object]"){ //对象Object
function isObj(obj){
for(item in obj){ //item is key
if(typeof obj[item] =='object'){ //Object里的object,Array,null
if(Object.prototype.toString.call(obj[item])=="[object Object]"){//子对象
isObj(obj[item]);
}else if(Object.prototype.toString.call(obj[item])=="[object Array]"){ //子数组
mainFun(obj[item]);
}else{
reset.push(obj[item]);//null
}
}else{ //string,boolean,number,undefined,Function
reset.push(obj[item]);
}
}
}
isObj(array[i]);
}else{ //null
reset.push(array[i]);
}
}else{ //string,boolean,number,undefined,Function
reset.push(array[i]);
}
}
}
mainFun(list);
return reset;
}