使用apply将数组项添加到另一个数组constarray=['a','b'];constelements=[0,1,2];array.push.apply(array,elements);console.info(array);//["a","b",0,1,2]函数只执行一次functiononce(fn){letcalled=falsereturnfunction(){if(!called){called=truefn.apply(this,arguments)}}}functionfunc(){console.log(1);}//调用letonlyOnce=once(func);//测试onlyOnce();//1onlyOnce();//不进行防抖/***防抖*@param{Function}func待执行的回调函数*@param{Number}等待延迟时间*@param{Boolean}immediate是否立即执行*@returnull*/lettimeout;functionDebounce(func,wait=3000,immediate=true){//清空定时器if(timeout!==null)clearTimeout(timeout);//立即执行,这种情况一般不用if(immediate){varcallNow=!timeout;timeout=setTimeout(function(){timeout=null;},wait);if(callNow)typeoffunc==='function'&&func();}else{//设置定时器,最后一次操作后,不会超时再次清除,所以执行延迟等待毫秒后的efunc回调方法timeout=setTimeout(function(){typeoffunc==='function'&&func();},wait);}}Debounce(()=>console.log(1));递归数组简化为一维letchildren=[1,[2,3],[4,[5,6,[7,8]]],[9,10]];functionsimpleNormalizeChildren(children){for(leti=0;iObject.values(item).includes(''));console.log(arr.length>0?""存在空值":"无空值");//存在空值计算数组中每个元素出现的次数letnames=['Alice','鲍勃',“蒂夫”、“布鲁斯”、“艾力克”e'];letcountedNames=names.reduce(function(allNames,name){if(nameinallNames){allNames[name]++;}else{allNames[name]=1;}returnallNames;},{});控制台。log(countedNames);//{Alice:2,Bob:1,Tiff:1,Bruce:1}按属性对对象进行分类letpeople=[{name:'Alice',age:21},{name:'Max',age:20},{name:'Jane',age:20}];functiongroupBy(objectArray,property){returnobjectArray.reduce(function(acc,obj){letkey=obj[property];if(!acc[key]){acc[key]=[];}acc[key].push(obj);returnacc;},{});}constgroupedPeople=groupBy(people,'age');console.log(groupedPeople);//{//20:[//{name:'Max',age:20},//{name:'Jane',age:20}//],//21:[{name:'Alice',age:21}]//}将带分隔符的字符串转换为n维数组conststr="A-2-12";conststr1=str.split('-');console.log(str1);constarr=str1.reverse().reduce((pre,cur,i)=>{if(i==0){pre.push(cur)returnpre}return[cur,pre]},[])控制台。log(arr)//["A"["B",["C"]]]本文转载自微信《前端磨难之路》,可通过以下二维码关注。转载本文请联系前端公众号。