今天,学会这10个JS代码段就够了!

 [[408192]]

用 apply 将数组各项添加到另一个数组

 
 
 
 
  1. const array = ['a', 'b']; 
  2. const elements = [0, 1, 2]; 
  3. array.push.apply(array, elements); 
  4. console.info(array); // ["a", "b", 0, 1, 2] 

函数只执行一次

 
 
 
 
  1. function once (fn){ 
  2.   let called = false 
  3.   return function () { 
  4.     if (!called) { 
  5.       called = true 
  6.       fn.apply(this, arguments) 
  7.     } 
  8.   } 
  9.  
  10. function func (){ 
  11.     console.log(1); 
  12.  
  13. //调用 
  14. let onlyOnce = once(func); 
  15.  
  16. // 测试 
  17. onlyOnce(); // 1 
  18. onlyOnce(); // 不执行 

防抖

 
 
 
 
  1. /** 
  2.  * 防抖 
  3.  * @param {Function} func 要执行的回调函数 
  4.  * @param {Number} wait 延时的时间 
  5.  * @param {Boolean} immediate 是否立即执行 
  6.  * @return null 
  7.  */ 
  8. let timeout; 
  9. function Debounce(func, wait = 3000, immediate = true) { 
  10.   // 清除定时器 
  11.   if (timeout !== null) clearTimeout(timeout); 
  12.   // 立即执行,此类情况一般用不到 
  13.   if (immediate) { 
  14.     var callNow = !timeout; 
  15.     timeout = setTimeout(function() { 
  16.       timeout = null; 
  17.     }, wait); 
  18.     if (callNow) typeof func === 'function' && func(); 
  19.   } else { 
  20.     // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法 
  21.     timeout = setTimeout(function() { 
  22.       typeof func === 'function' && func(); 
  23.     }, wait); 
  24.   } 
  25.  
  26. Debounce(()=>console.log(1)); 

递归数组降为一维

 
 
 
 
  1. let children = [1, [2, 3], [4, [5, 6, [7, 8]]], [9, 10]]; 
  2. function simpleNormalizeChildren(children) { 
  3.             for (let i = 0; i < children.length; i++) { 
  4.                 if (Array.isArray(children[i])) { 
  5.                     children = Array.prototype.concat.apply([], children); 
  6.                     simpleNormalizeChildren(children) 
  7.                 } 
  8.             } 
  9.             return children; 
  10.         } 
  11.  
  12. console.log(simpleNormalizeChildren(children)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

数组降维(二维降一维)

 
 
 
 
  1. function simpleNormalizeChildren(children) { 
  2.             for (let i = 0; i < children.length; i++) { 
  3.                 if (Array.isArray(children[i])) { 
  4.                     return Array.prototype.concat.apply([], children) 
  5.                 } 
  6.             } 
  7.             return children 
  8. let arrs = [['1'],['3']]; 
  9. const arr = simpleNormalizeChildren(arrs); 
  10. console.log(arr); // ['1','3'] 

使用可选链进行函数调用

 
 
 
 
  1. function doSomething(onContent, onError) { 
  2.   try { 
  3.    // ... do something with the data 
  4.   } 
  5.   catch (err) { 
  6.     onError?.(err.message); // 如果onError是undefined也不会有异常 
  7.   } 

检测数组对象中是否有空值

 
 
 
 
  1. const data = [ 
  2.   { 
  3.    name:"maomin" 
  4.   }, 
  5.   { 
  6.     name:"" 
  7.   } 
  8. const arr = data.filter(item => 
  9.     Object.values(item).includes('') 
  10. ); 
  11.  
  12. console.log(arr.length>0?"有空值":"无空值"); // 有空值 

计算数组中每个元素出现的次数

 
 
 
 
  1. let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; 
  2.  
  3. let countedNames = names.reduce(function (allNames, name) { 
  4.   if (name in allNames) { 
  5.     allNames[name]++; 
  6.   } 
  7.   else { 
  8.     allNames[name] = 1; 
  9.   } 
  10.   return allNames; 
  11. }, {}); 
  12.  
  13. console.log(countedNames); //  { Alice: 2, Bob: 1, Tiff: 1, Bruce: 1 } 

按属性对object分类

 
 
 
 
  1. let people = [ 
  2.   { name: 'Alice', age: 21 }, 
  3.   { name: 'Max', age: 20 }, 
  4.   { name: 'Jane', age: 20 } 
  5. ]; 
  6.  
  7. function groupBy(objectArray, property) { 
  8.   return objectArray.reduce(function (acc, obj) { 
  9.     let key = obj[property]; 
  10.     if (!acc[key]) { 
  11.       acc[key] = []; 
  12.     } 
  13.     acc[key].push(obj); 
  14.     return acc; 
  15.   }, {}); 
  16.  
  17. const groupedPeople = groupBy(people, 'age'); 
  18. console.log(groupedPeople); 
  19. // { 
  20. //   20: [ 
  21. //     { name: 'Max', age: 20 }, 
  22. //     { name: 'Jane', age: 20 } 
  23. //   ], 
  24. //   21: [{ name: 'Alice', age: 21 }] 
  25. // } 

将带有分割符的字符串转化成一个n维数组

 
 
 
 
  1.  const str = "A-2-12"; 
  2.  const str1 = str.split('-'); 
  3.  console.log(str1); 
  4.  const arr = str1.reverse().reduce((pre,cur,i) => { 
  5.  if(i==0) 
  6.   { pre.push(cur) 
  7.    return pre 
  8.  } 
  9.   return [cur,pre] 
  10. },[]) 
  11.   
  12. console.log(arr) // ["A"["B",["C"]]] 

本文转载自微信公众号「前端历劫之路」,可以通过以下二维码关注。转载本文请联系前端历劫之路公众号。

标题名称:今天,学会这10个JS代码段就够了!
网页路径:http://www.shufengxianlan.com/qtweb/news17/311417.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联