问题:
写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。
换句话说,所有数组中的所有值都应该以原始顺序被包含在内,但是在最终的数组中不包含重复值。
非重复的数字应该以它们原始的顺序排序,但最终的数组不应该以数字顺序排序。
代码:
function unite(arr1, arr2, arr3) {
var arrs = Array.from(arguments);//将arguments转化为数组
var arr=[];
for(var i=0;i<arrs.length;i++){
arr=arr.concat(arrs[i]);//将几个数组合并
}
var answer=[];
for(i=0;i<arr.length;i++){
if(arr.indexOf(arr[i])==i){
//如果第一次出现arr[i]的位置为i,表示arr[i]到现在为止只出现一次
answer.push(arr[i]);
}
}
return answer;
}
思路:
首先将arguments转化为数组,然后使用concat()方法将数组合并。合并完成后对数组进行去重处理,这里使用的方法是利用indexOf()方法得到每个字符最初出现的位置,如果与当前位置相同则表示第一次出现,将字符存入结果中,如果不相同则表示之前出现过。
ps:
arguments是一个类似数组的对象, 对应于传递给函数的参数。
深入理解indexOf()方法,利用indexOf()做去重处理比较方便,如果可以改变数组顺序可以先利用sort()方法将数组排序然后判断相邻字符是否相等以此达到去重的目的。
网友评论