1、数组去重
const unique1 = function(arr) {
if(!Array.isArray(arr)) {
console.log('type error')
return;
}
return [...new Set(arr)];
}
// 通过indexOf
const unique2 = function(arr) {
if(!Array.isArray(arr)) {
console.log('type error');
return
}
let list = [];
arr.length && arr.map(item => {
if(list.indexOf(item) == -1) {
list.push(item);
}
});
return list
}
// 通过obj
const unique3 = function(arr) {
if(!Array.isArray(arr)) {
console.log('type error');
return;
}
let obj = {};
let list = [];
arr.length && arr.map(item => {
if(!obj[item]) {
list.push(item)
obj[item] = 1;
}
});
return list;
}
2、数组排序
// 冒泡排序
let bubbleSort = function(arr) {
let len = arr.length
for(let i = len
for(j = 0
if(arr[j] > arr[j+1]) {
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
return arr
}
// ES6优化一下
let bubbleSort = function(arr) {
let len = arr.length
for(let i = len
for(j = 0
if(arr[j] > arr[j+1]) {
[arr[j], arr[j+1]] = [arr[j+1], arr[j]]
}
}
}
return arr
}
bubbleSort([3,1,2,5,6,4])
// 快速排序
let quickSort = function(arr) {
if(arr.length < 2) {
return arr
}
let left = [],right = [], cur = arr.splice(0,1)
let len = arr.length
for(let i = 0
if(arr[i] < cur) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return quickSort(left).concat(cur, quickSort(right))
}
quickSort([3,1,2,5,6,4])
// 选择排序
let selectSort = function(arr) {
let len = arr.length
for(let i = 0
for(let j = i
if(arr[j] < arr[i]){
[arr[i], arr[j]] = [arr[j],arr[i]]
}
}
}
return arr
}
selectSort([3,1,2,5,6,4])
class SubPub {
constructor() {
this._observer = {};
}
subscribe(name, callback) {
if(!isFunction(callback)) return;
if(!this._observer[name]) this._observer[name] = [];
this._observer[name].push(callback);
return this;
}
publish() {
const self = this;
const args = [...arguments];
const name = args[0];
const content = args.slice(1);
const list = this._observer[name];
if(!list || !list.length) return;
list.map(item => {
item.apply(self, content);
})
return self;
}
removeSub(name, callback) {
let list = this._observer[name];
if(!list || !list.length) return;
list.map((item, index) => {
if(item === callback) {
list.splice(index,1);
}
})
return this;
}
}
function isFunction(val) {
return Object.prototype.toString.call(val).slice(8,-1).toLocaleLowerCase() == 'function';
}
const sb = new SubPub();
const abcFn = function(data) {
console.log('abc' + data);
}
const qweFn = function(data) {
console.log('qwe' + data);
}
sb.subscribe('tap', abcFn);
sb.subscribe('tap', qweFn);
sb.publish('tap');