资讯专栏INFORMATION COLUMN

js遍历集合

546669204 / 1937人阅读

摘要:遍历只遍历对象自身的和继承的可枚举的属性可枚举的是继承来的可枚举属性在遍历数组时不建议使用,因为遍历不能保证遍历顺序,并且如果数组原型上添加了属性,也会被遍历出来建议在遍历数组时用方法,如果遍历对象用,再次建议相对来说,它会遍历出继

遍历 for-in

只遍历对象自身的和继承的可枚举的属性

Object.prototype.enumer=function(){
    console.log("可枚举的");
}

var obj={a:1,b:2};
for(var o in obj){
    console.log(o);
}

// a
// b
// enumer

//enumer是继承来的可枚举属性

在遍历数组时不建议使用,因为for-in遍历不能保证遍历顺序,并且如果数组原型上添加了属性,也会被遍历出来;

建议:

在遍历数组时用for方法,如果遍历对象用for-in,再次建议相对for-in来说,它会遍历出继承来的可枚举对象,所以更建议使用Obect.keys()方法

forEach

按照索引的顺序按个传递给定义的一个函数,并且可以在原数组的基础上进行修改

var arr=[1,2,4,5];
arr.forEach(function(x,i,a){
    a[i] = x+1 
}) ;

// 其中调用函数中有三个参数,x 表示数组中元素,i 表示下标,a 表示数组本身

回调过空位,并且保留空位

var arr=[1,2,,,3,4];  
arr.forEach(function(x,i,a){
    a[i] = x+1 
});
arr;  // [2, 3, , , 4, 5]

map()

将调用的数组的每个元素传递给指定的函数,并返回一个新数组,且函数必须有返回值

var arr=[1,2,3];
arr.map(function(x){ 
    return x * x; 
});
arr;  // [1,4,9]

如果是稀疏数组,返回的也是相同方式的稀疏数组;它具有相同的长度,相同的缺失元素;

filter()

判断传递函数返回值是true还是falsetrue 表示此数组元素被添加到返回数组(新数组)中,false 则相反;

返回一个新数组(通过逻辑判断的),并且返回的是稠密的数组

[1,2,3].filter(function( x , i ,arr ){   
return x<3;
});  
//  [1,2]

// 其中三个参数和forEach表示的一样;

filter() 会跳过稀疏数组中缺少的元素,它的返回数组总是稠密的;

filter的两种用法:

用来压缩稀疏数组

var dense = sparse.filter(function(){
    return true; 
});

压缩空缺并删除undefined和null元素:

a = a.filter(function(x){
    return x !==undefined && x !=unll; 
});

every() / some()

两者都是通过对数组元素应用指定的函数进行判定,返回true或者false

every() 当且仅当针对数组中的所有元素通过判断都是true时,函数返回true,如果有一个为false,那么函数返回false

some() 当数组中有一个元素通过判断是true时,函数返回true;如果要返回false,必须所有元素都返回false才可以;

[1,3,5].every(function(x){ 
return x<8 ;
});  
// true  元素都返回true

[1,2,4].some(function(x){ 
return 4 % 4 === 0; 
})  
// true 有一个元素返回true

两者都是确认返回什么值,它们就会停止遍历数组元素;

在空数组上,every()返回true,some()返回 false

reduce()

使用指定的函数将数组元素进行组合,生成单个值,有两个参数:

第一个参数是执行化简的函数(化简函数就是用某种方法把两个值组合或化简为一个值,并返回化简后的值),第二个参数是一个传递给函数的初始值;

var arr=[1,2,4];
var brr=arr.reduce(function(res,x,i,arr){
    // 其中 res 表示每次化简后的值,x 表示数组元素,i 表示数组下标,arr 表示数组本身
    return res + x;
},1);
brr;  // 8

其中1是初始值,初始值存在的时候,res首先赋初始值,x赋数组第一个元素,进行运算之后,res赋返回的值,x赋数组的第二个元素 ......,如果初始值不存在,那么resx 分别赋数组第一个和第二个元素,以此类推 ......;

在空数组中,不带初始值参数调用reduce将会报错

var arr=[];
var brr=arr.reduce(function(res,x){
    return res+x;
}); 
// TypeError: Reduce of empty array with no initial value

如果数组只有一个值且没有指定初始值,或者有一个空数组且指定一个初始值,reduce只会返回那个值,不会调用化简函数;

reduceRight()

工作原理和reduce一样,不同的是它按照数组索引从高到低(从左到右)处理数组

for...of...遍历

暂无

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91806.html

相关文章

  • JS数据结构与算法_集合&字典

    摘要:上一篇数据结构与算法链表写在前面说明数据结构与算法系列文章的代码和示例均可在此找到一集合集合数据结构集合是一种包含不同元素的数据结构。集合中的元素成为成员。 上一篇:JS数据结构与算法_链表 写在前面 说明:JS数据结构与算法 系列文章的代码和示例均可在此找到 一、集合Set 1.1 集合数据结构 集合set是一种包含不同元素的数据结构。集合中的元素成为成员。集合的两个最重要特性是:...

    sf_wangchong 评论0 收藏0
  • 如何高效地遍历 MongoDB 超大集合

    摘要:执行测试代码两种不同遍历方法的代码分别位于和。参考如何使用对一个万的的表进行遍历操作关于专注于微信小程序微信小游戏支付宝小程序和线上应用实时监控。自从年双十一正式上线,累计处理了亿错误事件,付费客户有金山软件百姓网等众多品牌企业。 GitHub 仓库:Fundebug/loop-mongodb-big-collection showImg(https://segmentfault.c...

    王晗 评论0 收藏0
  • 如何高效地遍历 MongoDB 超大集合

    摘要:执行测试代码两种不同遍历方法的代码分别位于和。参考如何使用对一个万的的表进行遍历操作关于专注于微信小程序微信小游戏支付宝小程序和线上应用实时监控。自从年双十一正式上线,累计处理了亿错误事件,付费客户有金山软件百姓网等众多品牌企业。 GitHub 仓库:Fundebug/loop-mongodb-big-collection showImg(https://segmentfault.c...

    Batkid 评论0 收藏0
  • 我对JS集合的简单学习

    摘要:我对集合的学习第一步知道相关概念集合是由一组无序且唯一的项组成的,在中已经实现了类似的类。就是集合第二步实现相关操作方法首先实现方法,判断值是否在集合中,返回布尔值。操作符还有另外一种实现方法,方法返回表明一个对象是否具有特定属性的布尔值。 我对集合的学习 第一步知道相关概念 集合是由一组无序且唯一的项组成的,在ES6中已经实现了类似的Set类。 function Set() { ...

    paney129 评论0 收藏0
  • NodeJs爬虫抓取古代典籍,共计16000个页面心得体会总结及项目分享

    摘要:目前这个爬虫还是比较简单的类型的,直接抓取页面,然后在页面中提取数据,保存数据到数据库。总结写这个项目其实主要的难点在于程序稳定性的控制,容错机制的设置,以及错误的记录,目前这个项目基本能够实现直接运行一次性跑通整个流程。 前言 之前研究数据,零零散散的写过一些数据抓取的爬虫,不过写的比较随意。有很多地方现在看起来并不是很合理 这段时间比较闲,本来是想给之前的项目做重构的。后来 利用这...

    legendmohe 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<