写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。
换句话说,所有数组中的所有值都应该以原始顺序被包含在内,但是在最终的数组中不包含重复值。
非重复的数字应该以它们原始的顺序排序,但最终的数组不应该以数字顺序排序。
function unite(arr1, arr2, arr3,arr4) {
//存放数组
var newArr;
//这里的判断有点鸡肋哈,毕竟参数有可能会出现更多个,而不是固定的2,3个
if(arr3,arr4){
newArr = arr1.concat(arr2,arr3,arr4);
}else if(arr3){
newArr = arr1.concat(arr2,arr3);
}else if(arr2) {
newArr = arr1.concat(arr2);
}else{
newArr = arr1;
}
//bigArr是内循环用的,在这里赋值刚好可以把处理好的newArr赋值给他,而相对的位置就会不变
var bigArr = newArr;
for(var i = 0;i < newArr.length;i++){
for(var t = 0;t < bigArr.length;t++){
//拿newArr的当前元素和bigArr每个元素比较,出现相同的,先判断是否位置相同,如果是的话则
//表示是同一个,继续下个元素比较。
if(newArr[i] == bigArr[t]){
if(i == t){
continue;
}else{
//要去除的位置就是目前对比的位置
newArr.splice(t,1);
}
}
}
}
return newArr;
}
<h2>这个呢是我自己写的,前面的判断又臭又长哈。但每次的经历都让我倍感开心。</h2>
<h6>其实思路都是差不多的,比较,然后要么剔除相同的元素,要么添加没有的元素。下面这个是别人写的,比我的好懂多了哈</h6>
function unite(arr1, arr2, arr3) {
var newArr =[];
for(var i =0;i < arguments.length;i++){
//这里遍历参数,传进来几个数组就是几个。都会被接受的,第一个方案的话是不行的,如果传进来
//的5,6个或更多个,多余的会出现undefined的。然后把遍历到的数组赋值给变量。
var newA = arguments[i];
for(var t= 0;t< newA.length;t++){
//这里得到的元素用来判断是否存在于newArr里面,如果没有是-1,有的话是正数
var newB = newA[t];
if(newArr.indexOf(newB)<0){
newArr.push(newB);
}
}
}
return newArr;
}
<h3>这个是官方写的哈,但重要的是理解它的思路!</h3>
<h6>这里建议各位在做题的时候先自己做,无论觉得多糟糕,只有是你自己做的你才会知道你自己的不足在哪里!之后再参考官方的思路,这样自己也会得到提升</h6>