数组去重
function arrayFilter(arr){
let res = [];
for(let i=0; i<arr.length; i++){
let curr = arr[i];
if(res.indexOf(curr) === -1){
res.push(curr);
}
}
return res;
}
function arrayFilter_1(arr){
return arr.filter((item, index, array) => {
return array.indexOf(item) === index;
});
}
function arrayFilter_3(arr){
let res = [], map = new Map();
for(let i=0; i<arr.length; i++){
let curr = arr[i];
if(!map.has(curr)){
res.push(curr);
}
map.set(curr, 1);
}
return res;
}
function arrayFilter_NaN(arr){
let res = [];
for(let i=0; i<arr.length; i++){
let curr = arr[i];
if(res.indexOf(curr) === -1){
if(curr !== curr && isNaN(curr) && res.includes(NaN)) continue;
res.push(curr);
}
}
return res;
}
扁平化数组
function flat(arr){
let res=[];
arr.forEach(item => {
if(Array.isArray(item)){
res = res.concat(arguments.callee(item));
}else{
res.push(item);
}
});
return res;
}
function flat_reduce(arr){
return arr.reduce((init, curr) => {
return init.concat(Array.isArray(curr) ? flat_reduce(curr) : curr);
}, [])
}
function flat_by_num(arr, num = Infinity){
return num > 0
? arr.reduce((init, curr) => {
return init.concat(Array.isArray(curr) ? flat_by_num(curr, --num) : curr)
});
: arr.slice();
}
实现Array.prototype.filter
Array.prototype.myFilter = function(fn){
let res = [];
this.forEach((item) => {
if(fn(item)){
res.push(item)
}
});
return res;
}
实现Array.prototype.map
Array.prototype.myMap = function(fn){
let res = [];
this.forEach((item, index, arr) => {
res[index] = fn(item, index, arr)
});
return res;
}
实现Array.prototype.reduce
Array.prototype.myReduce = function(fn, initial=0) {
let result = initial;
this.forEach(item => {
result = fn(result, item);
})
return result
}