0


ES6 -- find 详解

find

基本使用

Array.prototype.find
返回第一个满足条件的数组元素

const arr =[1,2,3,4,5];const item = arr.find(function(item){return item >3;});

console.log(item);//4

如果没有一个元素满足条件 返回undefined

const arr =[1,2,3,4,5];const item = arr.find(function(item){return item >5;});

console.log(item);//undefined

返回的元素和数组对应下标的元素是同一个引用

const arr =[{id:1,name:'张三',},{id:2,name:'李四',},{id:3,name:'王五',},];const item = arr.find((item)=> item.name ==='李四');
console.log(item);

在这里插入图片描述
回调函数的返回值是boolean 第一个返回true的对应数组元素作为find的返回值

const arr =[{id:1,name:'张三',},{id:2,name:'李四',},{id:3,name:'王五',},];const item = arr.find(function(item){return item.id >1;});
console.log(item);

在这里插入图片描述

回调的参数

当前遍历的元素 当前遍历出的元素对应的下标 当前的数组

const arr =[{id:1,name:'张三',},{id:2,name:'李四',},{id:3,name:'王五',},];const item = arr.find(function(item, index, arr){
  console.log(item, index, arr);});

在这里插入图片描述

find的第二个参数

更改回调函数内部的this指向

const arr =[{id:1,name:'张三',},{id:2,name:'李四',},{id:3,name:'王五',},];const item = arr.find(function(item, index, arr){
    console.log(item, index, arr);
    console.log(this);},{a:1});

在这里插入图片描述
如果没有第二个参数
非严格模式下 this -> window

const arr =[{id:1,name:'张三',},{id:2,name:'李四',},{id:3,name:'王五',},];const item = arr.find(function(item, index, arr){
  console.log(item, index, arr);
  console.log(this);});

在这里插入图片描述
在严格模式下
不传入第二个参数 this为undefined 与严格模式规定相同

'use strict';const arr =[{id:1,name:'张三',},{id:2,name:'李四',},{id:3,name:'王五',},];const item = arr.find(function(item, index, arr){
  console.log(item, index, arr);
  console.log(this);});

在这里插入图片描述

稀疏数组find

find会遍历稀疏数组的空隙 empty
具体遍历出的值 由undefined占位

const arr =Array(5);
arr[0]=1;
arr[2]=3;
arr[4]=5;const item = arr.find(function(item){
  console.log(item);returnfalse;});

在这里插入图片描述
而ES5数组扩展方法forEach,map,filter,reduce,reduceRight,every,some 只会遍历有值的数组
find的遍历效率是低于ES5数组扩展方法的

find不会更改数组

虽然新增了元素 但是find会在第一次执行回调函数的时候 拿到这个数组最初的索引范围

const arr =[1,2,3,4,5];const item = arr.find(function(item){
  arr.push(6);
  console.log(item);});
console.log(arr);

在这里插入图片描述

const arr =[1,2,3,4,5];const item = arr.find(function(item){
  arr.splice(1,1);
  console.log(item);});
console.log(arr);

在这里插入图片描述
splice 删除对应项 该项位置不保留 在数据最后补上undefined

const arr =[1,2,3,,,,7,8,9];
arr.find(function(item, index){if(index ===0){
    arr.splice(1,1);}
  console.log(item);});

在这里插入图片描述
delete
删除该项的值 并填入undefined

const arr =[1,2,3,,,,7,8,9];
arr.find(function(item, index){if(index ===0){delete arr[2];}
  console.log(item);});

在这里插入图片描述
pop
删除该项的值 并填入undefined

const arr =[1,2,3,,,,7,8,9];
arr.find(function(item, index){if(index ===0){
    arr.pop();}
  console.log(item);});

在这里插入图片描述

创建myFind

Array.prototype.myFind=function(cb){if(this===null){thrownewTypeError('"this" is null');}if(typeof cb !=='function'){thrownewTypeError('Callback must be a function type');}var obj =Object(this),
    len = obj.length >>>0,
    arg2 = arguments[1],
    step =0;while(step < len){var value = obj[step];if(cb.apply(arg2,[value, step, obj])){return value;}
    step++;}returnundefined;};
标签: es6 javascript 前端

本文转载自: https://blog.csdn.net/weixin_65402230/article/details/127172753
版权归原作者 _聪明勇敢有力气 所有, 如有侵权,请联系我们删除。

“ES6 -- find 详解”的评论:

还没有评论