JavaScript常见集合操作


集合的遍历

FOR循环(效率最高)

  • 优点:JavaScript最普遍的for循环,执行效率最高
  • 缺点:无法遍历对象
for(let i=0;i<array.length,i++){
//operation
}

FOR…IN循环(效率较低)

  • 优点:唯一一个能够获取对象的属性名的遍历方式
  • 缺点:会将对象通过继承得到的属性一齐遍历,造成非预料的结果且效率较低
//会访问非继承的属性
for(attr in object){//attr作为属性名
//object[attr]访问值
}
//避免访问继承的属性
for(attr in object){//attr作为属性名
if(object.hasOwnProperty(attr)){
//object[attr]访问值
}
}

FOR…OF循环(效率较高)

  • 优点:能够快速访问非继承属性值
  • 缺点:需要ES6支持
for(item of object){
//item访问值
}

FOREACH方法(数组内置高阶方法,含义清晰)

  • 优点:函数式编程,简洁,快速领会代码含义
  • 缺点:无法对对象使用
array.forEach(function(item,index,array)){
//item为值
//index为索引
//array为被访问数组
};

TIPS:

  1. 在对对象进行遍历时,如不需要访问属性名选择for...of循环,如需访问属性名选择for...in循环
  2. 在对数组进行访问时,使用forEach得到较好的可读性,传统的for循环能够带来很高的性能及拓展性

集合的操作

提倡的想机器一样思考中,编程问题的解决被分为了输入,处理和输出

处理,是对输入数据的处理,就可以分为从输入的数据中提炼出一定的有价值的数据,并对他们做出一些操作,得到希望得到的有价值的东西,并将他输出

MAP映射

Map映射是将输入的数据中有价值的东西提取出来,转化为更有利于处理的格式

let dataAfterProcess = array.map(function(item,index,array){
//item为值
//index为索引
//array为被访问数组
return ;//返回dataAfterProcess中希望被添加的元素
});

REDUCE计算

Reduce计算以提取好的数据输入,并获得最终的一个结果

let output = array.reduce(function(accumulator, currentValue, currentIndex, array){
//accumulator为输出结果
//currentValue为遍历数组目前的值
//currentIndex为遍历数组目前的索引
//array为被访问数组
return ;//返回希望累加的操作
},0);//0为计算结果的初始值,默认为数组第一个元素

TODO

在完成JS练习中,我时常会遇到以下问题待解决:

  1. Map操作中,经常会遇到需要根据已有的目标数组的情况做出相应的映射操作,但目前尚未发现怎样在Map循环中检查已映射的目标数组?
  2. 为对象实现接口使对象也具有MapReduce操作的能力

最新文章

  1. Java 枚举类
  2. 爹地,我找到了!15个极好的Linux find命令示例
  3. 如何解决mysql stop fail的问题
  4. 【转发】Linux下清除系统日志方法
  5. ERP联系人查询和修改(十六)
  6. Android:apk文件结构
  7. sizeof的作用——解释类中与类之外static变量的情况
  8. 基于cygwin构建u-boot(四)libgcc引用
  9. codeforces 659B Qualifying Contest
  10. PHP时间戳与时间相互转换(精确到毫秒)
  11. Android---&gt;Button按钮操作
  12. R语言︱排序问题
  13. Linux基础命令---uname显示计算机名称
  14. nginx + keepalived 主从模式
  15. BZOJ3531 树剖 + 动态开点线段树
  16. C#enum使用Attribute求字段名
  17. select 语法
  18. 使用POI操作PPT文档(插入文本、图片)转
  19. caffe安装编译问题-ImportError: No module named google.protobuf.internal
  20. Lucene.net 基本示例 《第一篇》

热门文章

  1. mybatis报Invalid bound statement (not found) 分析
  2. git入门篇
  3. bzoj1084: [SCOI2005]最大子矩阵 dp
  4. Codeforces Round #418 (Div. 2)D
  5. 004——php字符串中处理函数(三)
  6. 两个Fragment之间传递数据
  7. Redis.RedisNativeClient的方法get_Db 没有实现
  8. C++轮子队
  9. python高级编程之列表推导式
  10. 【LeetCode 232_数据结构_队列_实现】Implement Queue using Stacks