博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优化 JS 条件语句及JS 数组常用方法, ---- 看完绝对对日后开发有用
阅读量:6261 次
发布时间:2019-06-22

本文共 3700 字,大约阅读时间需要 12 分钟。

前言: 日常所说的优化优化、最后我们到底优化了哪些,不如让我们从代码质量开始;个人觉得简洁简化代码其实觉得存在感挺强烈的QAQ

1. 获取URL中 ?后的携带参数; 这是我见过最简洁的了,若有更简洁的请及时留言并附上代码怼我
// 获取URL的查询参数let params={}location.search.replace(/([^?&=]+)=([^&]+)/g, (_,k,v) => parmas[k] = v); cosnole.log(params)  // ?a=b&c=d&e=f  => {a: "b", c: "d", e: "f"}
2. 对多个条件筛选用 Array.includes
// 优化前function test(fruit) {  if (fruit == 'apple' || fruit == 'strawberry') {    console.log('red');  }}// 优化后function test(fruit) {  const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];  if (redFruits.includes(fruit)) {    console.log('red');  }}
3. 更少的嵌套,尽早返回
// 优化前function test(fruit, quantity) {  const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];  if (!fruit) throw new Error('No fruit!');  if (redFruits.includes(fruit)) {
  if (quantity > 10) { console.log('big quantity'); } }}// 优化后function test(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; if (!fruit) throw new Error('No fruit!'); // condition 1: throw error early if (!redFruits.includes(fruit)) return; // condition 2: stop when fruit is not redif (quantity > 10) { console.log('big quantity'); }}
4. 使用默认的函数参数和解构
//  优化前function test(fruit,quantity ) { const q = quantity || 1; console.log ( );  if (fruit && fruit.name)  {    console.log (fruit.name);  } else {    console.log('unknown');  }}// 优化后  function test({name} = {},quantity = 1) {  console.log (name || 'unknown');  console.log (quantity );}
5. 选择 Map 或对象字面量,而不是 Switch 语句 或者 if else
// 优化前function test(color) {  switch (color) {    case 'red':      return ['apple', 'strawberry'];    case 'yellow':      return ['banana', 'pineapple'];    case 'purple':      return ['grape', 'plum'];    default:      return [];  }} // 优化后  方式1  const fruitColor = {    red: ['apple', 'strawberry'],    yellow: ['banana', 'pineapple'],    purple: ['grape', 'plum']  };function test(color) {  return fruitColor[color] || [];} // 优化后  方式2  const fruitColor = new Map()    .set('red', ['apple', 'strawberry'])    .set('yellow', ['banana', 'pineapple'])    .set('purple', ['grape', 'plum']); function test(color) {  return fruitColor.get(color) || [];} // if... if else... else... 优化方法const actions = new Map([  [1, () => {    // ...  }],  [2, () => {     // ...  }],  [3, () => {     // ...  }]])actions.get(val).call(this)
6.数组 串联(每一项是否都满足)使用 Array.every ; 并联(有一项满足Array.some   过滤数组   每项设值
// 每一项是否满足[1,2,3].every(item=>{
return item > 2}) // false// 有一项满足[1,2,3].some(item=>{
return item > 2}) // true// 过滤数组[1,2,3].filter(item=>{
return item > 2}) // [3]// 每项设值[1,2,3].fill(false) // [false,false,false]
7. 数组去重
Array.from(new Set(arr))[...new Set(arr)]
8.数组合并
[1,2,3,4].concat([5,6])  // [1,2,3,4,5,6][...[1,2,3,4],...[4,5]]  // [1,2,3,4,5,6][1,2,3,4].push.apply([1,2,3,4],[5,6])  // [1,2,3,4,5,6]
9.数组求和
[1,2,3,4].arr.reduce(function (prev, cur) {return prev + cur;},0) // 10
10.数组排序
[1,2,3,4].sort(); // [1, 2,3,4],默认是升序[1,2,3,4].sort((a, b) => b - a); // [4,3,2,1] 降序
11.数组 判断是否包含值
[1,2,3].includes(4) //false[1,2,3].indexOf(4) //-1 如果存在换回索引[1, 2, 3].find((item)=>item===3)) //3 如果数组中无值返回undefined[1, 2, 3].findIndex((item)=>item===3)) //2 如果数组中无值返回-1
12.类数组转化为数组
Array.prototype.slice.call(arguments) //arguments是类数组(伪数组)Array.prototype.slice.apply(arguments)Array.from(arguments)[...arguments]
13.对象和数组转化
Object.keys({name:'张三',age:14}) //['name','age']Object.values({name:'张三',age:14}) //['张三',14]Object.entries({name:'张三',age:14}) //[[name,'张三'],[age,14]]
14.扁平化n维数组
[1,[2,3]].flat(2) //[1,2,3][1,[2,3,[4,5]].flat(3) //[1,2,3,4,5][1[2,3,[4,5[...]].flat(Infinity) //[1,2,3,4...n]

结语: 有不懂或有错误之处欢迎留言指正;希望看后对大家有用 

文章部分参考:

转载于:https://www.cnblogs.com/ljx20180807/p/10844892.html

你可能感兴趣的文章
codeforces 445A
查看>>
基础语法
查看>>
多线程和CPU的关系
查看>>
005 -- DuLinkList_add nodes, delete node, Caser print..
查看>>
HashMap、TreeMap、LinkedHashMap、hashtable的区别
查看>>
ajax之百度 应用实例
查看>>
单行文本溢出、多文本溢出
查看>>
yarn的学习-2-从 npm 迁移到 yarn-包管理工具
查看>>
vagrant特性——基于docker开发环境(docker和vagrant的结合)-1-基本使用
查看>>
SQL 学习——简序以及学习路线
查看>>
Quoit Design
查看>>
iOS---后台运行机制详解
查看>>
python-装饰器的最终形态和固定格式 语法糖
查看>>
iphone配置实用工具iPhone Configuration Utility
查看>>
Centos搭建开发环境,PHP7+ Nginx1.12+ Mysql5.7
查看>>
RSA的密钥把JAVA格式转换成C#的格式
查看>>
转载 HTTPS 之fiddler抓包、jmeter请求
查看>>
Android常用查询网站
查看>>
wifi diplasy流程介绍
查看>>
使用浏览器做编辑器
查看>>