思路一:
- 构建一个新的数组存放结果
- for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
- 若结果数组中没有该元素,则存到结果数组中
function unique1(arr) {
var out = [],
i = 0;
for (i; i < arr.length; i++) {
if (out.indexOf(arr[i]) === -1) {
out.push(arr[i])
}
}
return out
}
思路二:
- 先将原数组进行排序
- 检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
- 如果不相同,则将该元素存入结果数组中
function unique2(arr) {
var out = arr.sort(function (a, b) {
return b - a
}),
i = 0,
res = [];
for (i; i < arr.length; i++) {
if (arr[i] !== res[res.length - 1]) {
res.push(arr[i])
}
}
return res
}
思路三:
- 创建一个新的数组存放结果
- 创建一个空对象
- for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。
function unique3(arr) {
var out = [],
ob = {},
i = 0;
for (i; i < arr.length; i++) {
if (!ob[arr[i]]) {
out.push(arr[i]);
ob[arr[i]] = true
}
}
return out;
}