console
const doubleDupicate=(arr)=>{
return arr.filter(item=>item%2===0)
.map((item,index)=>{
return item*2
});
}
const removeDupicate=(str)=>{
const map = new Map();
let result = "";
for(const char of str) {
if(!map.has(char)) {
map.set(char,true);
result+=char;
}
}
return result;
}
const debounce=(fn,delay)=>{
let timer = null;
return function(...args) {
if(timer) clearTimeout(timer);
timer = setTimeout(()=>{
fn.apply(this,args)
},delay)
}
}
const debounced=debounce(()=>{console.log("111")},1000)
const throttle=(fn,limit)=>{
let last = 0;
return function(...args) {
let now = Date.now();
if(now-last>=limit) {
fn.apply(this,args);
last = now;
}
}
}
const throttled = throttle(() => console.log("Scroll!"), 1000);
const maxNoDupicateStr=(str)=>{
let left = 0;
let set = new Set();
let max = 0;
for(let right=0;right<str.length;right++) {
while(set.has(str[right])) {
set.delete(str[left])
left++;
}
set.add(str[right])
max = Math.max(max,right-left+1);
}
return max;
}
const maxCount=(nums)=>{
let left = 0;
let max = nums[0];
let tempMax = nums[0];
for(let right=0;right<nums.length;right++) {
tempMax = Math.max(nums[right],tempMax+nums[right]);
max = Math.max(tempMax,max);
}
return max;
}
const promiseAll=(promises)=>{
return new Promise((resolve,reject)=>{
const result = [];
let count = 0;
if(promises.length===0) {
resolve([]);
return;
}
for(let p of promises) {
Promise.resolve(p)
.then(value=>{
result.push(value);
count++;
if(count===promises.length) {
resolve(result)
}
})
.catch(err=>{
reject(err)
})
}
})
}
const promiseRace=(promises)=>{
return new Promise((resolve,reject)=>{
if(promises.length===0) {
resolve([]);
return;
}
promises.forEach((p,index)=>{
Promise.resolve(p)
.then(value=>resolve(value))
.catch(err=>reject(err))
})
})
}
const promiseAny=(promises)=>{
return new Promise((resolve,reject)=>{
if(promises.length===0) {
resolve([]);
return;
}
const errResult = []
let count = 0;
promises.forEach((p,index)=>{
Promise.resolve(p)
.then(value=>resolve(value))
.catch(err=>{
errResult.push(err)
count++;
if(count===promises.length) {
reject(errResult)
}
})
})
})
}
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);
const p4 = Promise.reject(4);
const p5 = Promise.reject(5);
const p6 = Promise.reject(6);
const delegate=(parent,selector,type,handler)=>{
parent.addEventListener(type,(event)=>{
let target = event.target;
while(target&&target!==parent) {
if(target.matches(selector)){
handler.call(target,event);
break;
}
target = target.parentElement;
}
})
}
const ul = document.getElementById("list");
delegate(ul, "li", "click", function (e) {
console.log("You clicked:", this.textContent);
});
const findFirst=(s)=>{
const set = new Set();
for(const char of s) {
if(!set.has(char)) set.add(char);
else set.delete(char);
}
for(let i=0;i<s.length;i++) {
if(set.has(s[i])) return i;
}
return -1;
}
const reverseStr=(str)=>{
let s = str.trim();
let ans = "";
for(let right=s.length-1;right>=0;right--) {
while(right>=0&&s[right]===" ") right--;
let left = right-1;
while(left>=0&&s[left]!==" ") left--;
ans+=s.slice(left+1,right+1)+" ";
right = left;
}
return ans.trim();
}
const flatten=(arr)=>{
if(arr.length===0) return [];
let result = [];
for(const item of arr) {
if(!Array.isArray(item)) result.push(item);
else result.push(...flatten(item))
}
return result;
}
const frequency=(s)=>{
const map = new Map();
let result = ""
for(const char of s) {
map.set(char,(map.get(char)||0)+1)
}
const arr = Array.from(map).sort((a,b)=>b[1]-a[1])
for(let i in arr) {
result+= arr[i][0].repeat(arr[i][1])
}
return result;
}
const intersection=(nums1,nums2)=>{
const set1 = new Set(nums1);
const set2 = new Set();
for(const item of nums2) {
if(set1.has(item)) set2.add(item)
}
return Array.from(set2)
}
const deepClone=(obj,cache=new Map())=>{
if(obj===null||typeof obj!=="object") return obj;
if(cache.has(obj)) return cache.get(obj);
let clone = Array.isArray(obj)?[]:{};
cache.set(obj,clone);
for(const key in obj) {
clone[key] = deepClone(obj[key],cache)
}
return clone;
}
const obj = {
name: 'Alice',
info: {
age: 25,
favorites: ['music', 'chess'],
},
};
obj.self = obj;
const copy = deepClone(obj);
class LRUCache {
constructor(size) {
this.size = size;
this.cache = new Map();
}
put(key,value) {
if(this.cache.size<this.size) this.cache.set(key,value);
else {
this.cache.delete(this.cache.keys().next().value);
this.cache.set(key,value)
}
}
get(key) {
if(!this.cache.has(key)) return -1;
const value = this.cache.get(key);
this.cache.delete(key);
this.cache.set(key,value)
return value;
}
}
const findMostFrequence=(s)=>{
const map = new Map();
let max = 0;
if(s==="") return "";
for(const char of s) {
map.set(char,(map.get(char)||0)+1)
max = Math.max(max,map.get(char))
}
for(const [key,value] of map) {
if(map.get(key)===max) return key;
}
}
const anagram=(s1,s2)=>{
if(s1.length!=s2.length) return false;
const map1 = new Map();
const map2 = new Map();
for(const char of s1) {
map1.set(char,(map1.get(char)||0)+1);
}
for(const char of s2) {
if(!map1.has(char)) return false;
map1.set(char,map1.get(char)-1);
if(map1.get(char)===0) map1.delete(char);
}
if(map1.size===0) return true;
return false;
}
const str1 = "listen";
const str2 = "sitlen";
const str3 = "listes"
const shuffle=(arr)=>{
for(let i=arr.length-1;i>0;i--) {
const j = Math.floor(Math.random()*(i+1));
[arr[i],arr[j]] = [arr[j],arr[i]]
}
return arr;
}
const deepUniqueArray=(arr)=>{
const result = [];
const set = new Set();
for(const item of arr) {
let key;
if(item!==null&&typeof item==="object") {
key = JSON.stringify(item)
} else key = item
if(!set.has(key)) {
set.add(key)
result.push(item);
}
}
return result;
}
const shallowEqual=(obj1,obj2)=>{
if(obj1===obj2) return true;
if(typeof obj1!=="object"
||typeof obj2!=="object"
||obj1===null||obj2===null
) return false;
const key1 = Object.keys(obj1);
const key2 = Object.keys(obj2);
if(key1.length!==key2.length) return false;
for(const key of key1) {
if(!obj2.hasOwnProperty(key)
||obj2[key]!==obj1[key]
) return false;
}
return true;
}
const a = { name: "Alice", age: 20};
const b = { name: "Alice", age: 20};
const c = { name: "Alice" };
const flattenObject=(obj,prefix="",result={})=>{
for(const item in obj) {
const key = prefix?`${prefix}.${item}`:item;
if(typeof obj[item]==="object"&&obj[item]!==null) {
flattenObject(obj[item],key,result)
}
else result[key] = obj[item]
}
return result;
}
console.log(flattenObject({
a: 1,
b: {
c: 2,
d: {
e: 3
}
}
})
)
<button onclick="debounced()">debounce</button>
<button onclick="throttled()">throttle</button>
<ul id="list">
<li>Item 1</li>
<li>Item 2</li>
</ul>