运用知识点:
…扩展运算符(扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值)以及Set key不能重复的特性
var shuzu =["red","blue","red","green","blue"];
var quchonghou = [...new Set(shuzu)];
console.log(quchonghou,Array.isArray(quchonghou));
执行后结果为:
是不是很神奇? 我以前虽然想到用Set但是没想到用…扩展运算符然后以字面量的形式创建数组。
补充一个原始的
// 思路:获取没重复的最右一值放入新数组
/*
* 推荐的方法
*
* 方法的实现代码相当酷炫,
* 实现思路:获取没重复的最右一值放入新数组。
* (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)*/
function uniq(array){
var temp = [];
var index = [];
var l = array.length;
for(var i = 0; i < l; i++) {
for(var j = i + 1; j < l; j++){
if (array[i] === array[j]){
i++;
j = i;
}
}
temp.push(array[i]);
index.push(i);
}
console.log(index);
return temp;
}
var aa = [1,2,2,3,5,3,6,5];
console.log(uniq(aa));
再补一个带对象缓存的,复杂度 O(n)
var a = [1, 1, '1', '2', 1]
function unique(arr) {
var obj = {}
return arr.filter(function(item, index, array){
return obj.hasOwnProperty(typeof item + item) ?
false :
(obj[typeof item + item] = true)
})
}
console.log(unique(a)) // [1, 2, "1"]