js代码优化

本文探讨如何优化if...else...条件语句,并引入使用filter()和map()的简洁方法,同时讲解了数组操作如find(), includes(), sort()的优化实践,以及装箱拆箱概念和数据结构reduce()的应用实例。
摘要由CSDN通过智能技术生成

s1.优化  if...else...

let this.list=[

                {name:'巧克力',id:0,group:'套餐1'},

                {name:'薯片',id:1,,group:'套餐2'},

                {name:'瓜子',id:2,,group:'套餐1'},

                {name:'溜溜梅',id:3,,group:'套餐3'},

                {name:'辣条',id:4,,group:'套餐1'},

                {name:'饮料',id:5,,group:'套餐2'},

                {name:'面包',id:6,,group:'套餐1'},

        ]

// 要求据id返回list的名称    find()

//bad

 format(val) {       

     if (val === 0) return '巧克力'
      else if (val === 1) return '薯片'
      else if (val === 2) return '瓜子'
      else if (val === 3) return '溜溜梅'
      else if (val === 4) return '辣条'
      else if (val === 5) return '饮料'
      else if (val === 6) return '面包'

}

//good

 format(val) {

return this.list.find(item => item.id === val).name

}

//要求返回套餐1里的食品名称    find()和filter()

//bad

let names=[]

for(let i=0;i<this.list.length;i++){

    if(this.list[i].group==='套餐1'){

    names.push(this.list[i].name)

  }

}

//good

let names=this.list.find.filter(i=>i.group==='套餐1').map(i=>i.name)

//替换成使用filter与map来取代for循环不仅可以使代码更精简,还可以使语义更加明确,这样我们一下就可以看出是先对数组过滤再重组

filter()

//过滤数组中的虚值

let arr=[1,'a',undefined,NaN,2,null,true,'something',false]

console.log(arr.filter(Boolean))     //[1, 'a', 2, true, 'something']

//当我们需要创建新变量时, 有时需要检查为其值引用的变量是否为null或未定义时, 就可以使用简便写法。空值合并操作符(??)

//bad

if (key!==null&&key!==undefiend){
    string=''
}else{
    string='123'
}

//good

 string=key??'123'  

// 空值合并操作符(??) 当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。



补充:可选链操作符(?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。 ?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值

let person = {
    name: "胡三疯",
    education:null
}

let school = person.education.school  //报错
let school = person.education?.school  //不会报错  返回undefiend


reduce()

我们应该利用reduce方法来快速找到基本的数学运算。

const array  = [5,4,7,8,9,2];
array.reduce((a,b) => a+b);
// 输出: 35
  • 最大
array.reduce((a,b) => a>b?a:b);
// 输出: 9
  • 最小
array.reduce((a,b) => a<b?a:b);
// 输出: 2

includes()

let str='a'
let arr=['a','b','c']

//bad

if(str==='a'||str=='b'||str=='c'){    
    .....
}

//good

if(arr.includes(str)){
...
}

//缩短数组长度  用数组的length

const numbers = [1, 2, 3, 4, 5]

numbers.length = 3;

console.log(numbers); // [1, 2, 3]          

数字排序  sort()---根据unicode编码排序(存在bug)

let arr=[6,3,4,1,9]
console.log(arr.sort())   // (5) [1, 3, 4, 6, 9]

let arr1=[12,25,16,56,23,45,1,9]
console.log(arr1.sort())  //(8) [1, 12, 16, 23, 25, 45, 56, 9]
正确的方法::::定义一个比较器函数

sort(callback)

function(x,y){return x-y}  x-y小于0,则把x移到y前面

let arr1=[12,25,16,56,23,45,1,9]

console.log(arr1.sort(function(x,y){return x-y}))  //(8) [1, 9, 12, 16, 23, 25, 45, 56]

console.log(arr1.sort(function(x,y){return y-x}))  //(8) [56, 45, 25, 23, 16, 12, 9, 1]

装箱与拆箱的概念

装箱:基本数据类型转换至引用数据类型的操作

var num=131  //number
var objNum=new Number(123)  // object

拆箱:引用类型转换成对应的值类型对象

方法一: valueof()
var objNum=new Number(123)  //object
let num=objNum.valueof()    //number
//方法二:   js toPrimitive(input, type) input:传入的值 type: 值类型

//  内部流程
//   1.input 判断是不是原始类型的值:是直接返回
//   2.不是: input.value0f() :是原始类型:直接返回
//   3.还不是: input. tostring() : string 是原始类型返回
//   4.报错

//   value0f(): input 原始类型的值:有:返回,没有:返回对象本身
//   tostring(): input 字符串转换:对象: [object type] type: 对象类型

//   面试题
// console.1og([] + [])          // " " + toPrimitive()
// console.1og([].valueOf())     // []
// console.1og([].toString())    // ''+''   // "

// console.1og([] + {}) /1 " + toPrimitive()   //[object object ]
// console.1og([].valueOf())    // ''
// console.1og({}.valueOf())    // []
// console.1og({}.toString())   //[object object ]

console.log({}+[]) //有的浏览器中显示0  ---因为将{}当作代码块了---console.log(+[])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值