数组去重,当前数据,和原数组里做比较,没有就push进去。
所以 indexOf 和includes 。 可以实现
indexOf
!(function () {
let values = [
'Hare',
'Krishna',
'Hare',
'Krishna',
'Krishna',
'Krishna',
'Hare',
'Hare',
':-O',
];
function unique(values) {
let arr = [];
for (let key of values) {
if (arr.indexOf(key) == -1) {
arr.push(key);
}
}
return arr;
}
console.log('unique', unique(nums));
})();
includes
!(function () {
let values = [
'Hare',
'Krishna',
'Hare',
'Krishna',
'Krishna',
'Krishna',
'Hare',
'Hare',
':-O',
];
function unique(values) {
let arr = [];
for (let key of values) {
if (!arr.includes(key)) {
arr.push(key);
}
}
return arr;
}
console.log('unique', unique(nums));
})();
当然,也可以做一个hash表,思想和includes,indexOf 一样
Map
!(function () {
let values = [
'Hare',
'Krishna',
'Hare',
'Krishna',
'Krishna',
'Krishna',
'Hare',
'Hare',
':-O',
];
function unique(values) {
let arr = [];
let map = new Map();
for (let key of values) {
if (!map.has(key)) {
map.set(key);
arr.push(key);
}
}
return arr;
}
console.log('unique', unique(nums));
})();
new Set
!(function () {
let values = [
'Hare',
'Krishna',
'Hare',
'Krishna',
'Krishna',
'Krishna',
'Hare',
'Hare',
':-O',
];
function unique(values) {
return [...new Set(values)];
// return Array.from(new Set(values));
}
console.log('unique', unique(nums));
})();
性能比较
讨论算法,无非就是空间复杂度,和时间复杂度。但是 在js环境,无意用到的api,都可能是封装过的,导致不能很好的计算出时间复杂度。(最好还是c来写).