js中sort排序函数的妙用

一般使用方法

列 : [2,,3,6,9,5,1];

升序: arr.sort( (a,b) => a-b)

  1. let arr = [2,,3,6,9,5,1];
  2. arr.sort( (a,b) => a-b);

a,b 分别代表的是 前一项和后一项,通过返回 true 或者false 来判断是否进行内部的运算操作;

降序 : arr.sort( (a,b) => b-a)

二维数组的使用

列 : arr = [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

基本使用

如果我们想按照 arr [i][0] 来将数组进行升序排列
arr.sort ( (a,b) => a[0] -b[0] )

进阶

在此基础上 我们还想 , 相同的 a[i][0] 如 【7,0】【7.1】进行降序排列

  1. arr.sort( (a,b)=>{
  2. if(a[0] === b[0]){
  3. return b[1] - a[1]
  4. }
  5. return a[0] - b[1]
  6. })

更好的数据更新

当我们进行数据的操作的时候,最好的方式是副作用最小,类似于纯函数,(输入一个值每次都返回同一个值,不会对原数据进行修改),也是在这种思想下,有了更好的数据更新方案;
这是一个 ES6的延展操作符操作,data1 中的相同的字段被 data2替换掉了,不同的则添加上去了,而且没有对原数据进行任何的修改;

  1. const data1 = { name: 1, age: 18}
  2. const data2 = { name: 2, sex: '男'}
  3. console.log({
  4. ...data1,
  5. ...data2
  6. })
  7. //{name: 2, age: 18, sex: "男"}

更好的(数组)数据删除

当我们需要对数据( data )中的 数组进行删除操作时,你的想法是什么,当时我的第一个想法是 splice API,他可以对数组进行删除更新操作,但你是不是需要找到索引然后删除他呢,这需要两步,而且违背了副作用最小的原则,想想还有什么好的办法;
filter()实操

  1. const newRecords = this.state.records.filter((item)=> item.id !== data.id);
  2. this.setState({
  3. records: newRecords
  4. })