1.字符串反转
const str = 'I am a big boy';
const result = str.split('').reverse().join('');
console.log(result);
*split(): 把字符串根据分隔符转化成数组
*reverse(): 反转数组
*join(): 把数组根据分隔符转化为字符串
2.防抖
// fn为用户传入的需要防抖的函数或方法
// wait 是需要等待的时间
const debounce = (fn, wait = 300) => {
let timer = 0; // 设置定时器
return function(...args) { // args为fn的参数
if(timer) { // 如果已经过了规定延迟的时间,则清空定时器
clearTimeout(timer);
}
timer = setTimeout(() => {
fn.apply(this, args);
}, wait)
}
}
// 防抖的意义就在于每次用户调用一个方法,这个方法都必须等待相应延迟时间(wait)后才会执行
3.数组去重(只列举部分方法)
1.两个 for 循环去重
let arr = [1, 1, 1, 'qq', 'cc', 1, 'qq', undefined, 'cc', undefined, 2, 3, 'qq'];
for(let i=0; i<arr.length; i++) {
for(let j=i+1; j<arr.length; j++) {
if(arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
console.log(arr);
结果:
image.png
但是这个方法有局限性(无法去除 {} 和 NaN):
let arr = [{}, {}, NaN, NaN, 1, 1, 1, 'qq', 'cc', 1, 'qq', undefined, 'cc', undefined, 2, 3, 'qq'];
for(let i=0; i<arr.length; i++) {
for(let j=i+1; j<arr.length; j++) {
if(arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
console.log(arr);
结果:
image.png
2.ES6 的 Set 去重(可去除重复的NaN,但无法去重多余的 {})
let arr = [1, 1, 1, 'qq', 'cc', 1, 'qq', undefined, 'cc', undefined, 2, 3, 'qq'];
let result = Array.from(new Set(arr));
console.log(result);
结果:
image.png
4.实现 new
// 创建一个新的对象,这个对象的__proto__要指向构造函数的原型对象
// 执行构造函数
// 返回值如果为 object 类型则作为 new 方法的返回值返回,否则返回上述全新对象
function myNew(fn, ...args) {
let instance = Object.create(fn.prototype);
let res = fn.apply(instance, args);
return typeof res === 'object' ? res: instance;
}
Object.create() 创建一个新对象
参数:proto(必须),该参数会被赋值到新建对象的原型上。
返回值:在指定原型对象上添加新属性后的对象
网友评论