普通 for 循环遍历

  JS数组遍历:
  
  1、普通 for 循环遍历
  
  var arr = [1,2,3,4,5]
  
  for(var i = 0; i < arr.length; i++){
  
  console.log(arr[i])
  
  }
  
  // 1
  
  // 2
  
  // 3
  
  // 4
  
  // 5
  
  2、优化版 for 循环:使用变量,将长度缓存起来,避免重复获取长度,数组很大时优化效果明显
  
  var arr = [1,2,3,4,5];
  
  for(var j = 0, len = arr.length; j < len; j++){
  
  console.log(arr[j])
  
  }
  
  // 1
  
  // 2
  
  // 3
  
  // 4
  
  // 5
  
  3、forEach,数组自带的循环,主要功能是遍历数组,实际性能比for还弱
  
  var arr = [1,2,3,4,5];
  
  arr.forEach(function(value, i){
  
  console.log(i + ':' + value)
  
  })
  
  // 0:1
  
  // 1:2
  
  // 2:3
  
  // 3:4
  
  // 4:5
  
  forEach这种方法也有一个小缺陷:你不能使用break语句中断循环,也不能使用return语句返回到外层函数。
  
  4、map遍历,map此时不是‘地图’而是‘映射’,顾名思义就是将此数组映射到一个新数组。用法与 forEach 相同
  
  var arr = [1,2,3,4,5];
  
  arr.map(function(value,index){
  
  console.log(index + ':' + value)
  
  })
  
  同样,map语法不能使用break语句中断循环,但是map支持使用return语句,支持return返回值。是返回一个新数组,而不会改变数组。
  
  var arr = [1,2,3,4,5]
  
  var arrNew = arr.map(function(val, index){
  
  return val*2
  
  })
  
  console.log(arrNew) // [2, 4, 6, 8, 10]
  
  map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。
  
  ['aaa', 'bbb', 'ccc'].map(function(elem, index, arr) {
  
  console.log(index);
  
  console.log(elem);
  
  console.log(arr)
  
  });
  
  // 0
  
  // aaa
  
  // ["aaa", "bbb", "ccc"]
  
  // 1
  
  // bbb
  
  // ["aaa", "bbb", "ccc"]
  
  // 2
  
  // ccc
  
  // ["aaa", "bbb", "ccc"]
  
  此外,map()循环还可以接受第二个参数,用来绑定回调函数内部的this变量,将回调函数内部的this对象,指向第二个参数,间接操作这个参数(一般是数组)。
  
  var arr = ['a', 'b', 'c'];
  
  [1, 2].map(function (e) {
  
  return this[e];
  
  }, arr)
  
  // ["b", "c"]
  
  5、for-of 遍历,是ES6新增功能
  
  var arr = [1,2,3,4,5]
  
  for(let item of arr){
  
  console.log(item)
  
  }
  
  // 1
  
  // 2
  
  // 3
  
  // 4
  
  // 5
  
  for-of 性能更优;
  
  与forEach 不同的是,它可以正常相应break、continue、return语句;
  
  for-of 不仅支持数组,还支持大多数类数组对象;
  
  for-of 还支持字符串遍历
  
  6、for-in 遍历
  
  for-in 是为了遍历对象而设计的,不适用于遍历数组。
  
  遍历数组的缺点,数组的下标 index 是 number类型,for-in 遍历的index的值是 string 类型
  
  var arr = {number:1, age:18, sex: '女'}
  
  for(var key in arr){
  
  console.log(key + ':' + arr[key])
  
  }
  
  // number:1
  
  // age:18
  
  // sex:女
  
  任何对象都继承了Object对象,或者其它对象,继承的类的属性是默认不可遍历的,for... in循环遍历的时候会跳过,但是这个属性是可以更改为可以遍历的,那么就会造成遍历到不属于自身的属性。
  
  // 举例说明遍历不到继承属性
  
  var obj = {};
  
  for(var p in obj){
  
  console.log(p)
  
  }
  
  // 无任何输出内容
  
  如果只想遍历自身的属性,不会产生遍历失真的情况,应该结合hasOwnPropertty方法,在循环内部判断一下。
  
  var person = { name: '老张' };
  
  for (var key in person) {
  
  if (person.hasOwnProperty(key)) {
  
  console.log(key);
  
  由容器维护Rockerjs-MVC和应用中的各种模块,如component、starter、filter、controller等。filter采用职责链模式可通过配置文件设置顺序,最终请求由 dispatcher 分发给对应的controller。service负责每次处理事务,包括DAO、RPC等。最终controller的响应再由dispatcher下发给插件 view resolver,渲染完毕后返回响应。
  
  Rockerjs-MVC内部通过插件的形式扩展渲染模板,目前提供了基于vue和ejs模板的渲染引擎。
  
  Rockerjs-MVC实例
  
  index.ts
  
  import { Application, AbstractApplication } from "@rockerjs/mvc";
  
  @Application
  
  class App extends AbstractApplication{
  
  public static async main(args:www.baihuiyulegw.com RockerConfig.Application) {
  
  console.log('main bussiness', args);
  
  }
  
  }
  
  homeController.ts
  
  import { Controller, Get, Param, Request } from www.dayuzaixianyL.cn'@rockerjs/mvc';
  
  @Controller("/home"www.tianscpt.com)
  
  export class HomeController {
  
  @Get({url: '/a'})
  
  async home(@Param("name"www.yunyouuyL.com) name: string, @Param("person") person: object) {
  
  return {
  
  tag: 'hello world',
  
  name,
  
  person
  
  }
  
  }
  
  }
  
  app.dev.config
  
  port=8080
  
  [filter:trace]
  
  [mysql]
  
  starter=@rockerjs/mysql-starter
  
  host=127.0.0.1
  
  user=NODE_PERF_APP_user
  
  port=3308
  
  database=NODE_PERF_APP
  
  password=root
  
  resourcePath=model/resource
  
  Rockerjs-MVC中通过 app.${env}.config 定义相关初始化信息,相关的类与中间件都交于容器并根据配置文件进行实例化和初始化,这样就完成一个最简单应用的搭建。具体使用,请详见 文档。
  
  RPC
  
  Node EE推荐的RPC方式为 “Dubbo和HTTP”。Node EE设计初期考虑到与现存系统无缝接入的需求,因此毫无顾虑的投入 Dubbo 的怀抱。在Dubbo中间件领域内,我们开发了基于此协议的 Consumer 和 Provider支撑业务需求。
  
  consumer
  
  支持泛化调用,无需声明接口动态调用
  
  测试阶段可配置负载策略
  
  provider
  
  支持泛化调用
  
  兼容常规HTTP接口
  
  Java研发快速上手
  
  服务治理
  
  关于Dubbo Provider,我们采用Proxy和Facade设计模式尽可能让前后端开发人员快速、可扩展的编写代码,同时兼容已有项目。
  
  @Dubbo({
  
  interface: 'com.vdian.vstudio.service.ProjectService',
  
  method: 'getProjectInfo',
  
  params: ['id','type'www.www.furggw.com],
  
  version: '1.0.0',
  
  nodeServerUri: www.tianjiuyule178.com '/dubbo/get/project'
  
  })
  
  @Post({ url: '/get/project'})
  
  @AutoWrap
  
  public async getProjectInfo(@Param('param') param: {id: number, type: string}, @Param('context') context: object) {
  
  const {id,type} = param;
  
  let result = await this.projectService.getProjectInfoAll(id,type);
  
  return {
  
  project: result
  
  7、while循环
  
  while循环语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。
  
  var i = 0;
  
  while(i < 10){
  
  console.log('当前i为:' + i)
  
  i++
  
  }
  
  8、do...while循环
  
  do...while循环与while循环类似,唯一的区别就是先运行一次循环体,然后判断循环条件。
  
  var x = 5;
  
  var y = 0;
  
  do {
  
  console.log(y);
  
  y++;
  
  } while(y < x)
  
  9、forEach 循环
  
  forEach方法与map方法很相似,也是对数组的所有成员依次执行参数函数。但是,forEach方法不返回值,只用来操作数据。也就是说,如果数组遍历的目的是为了得到返回值,那么使用map方法,否则使用forEach方法。forEach的用法与map方法一致,参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。
  
  function log(element, index, array) {
  
  console.log('[' + index + '] = ' + element);
  
  } ;
  
  [2, 5, 9].forEach(log);
  
  10、filter过滤循环
  
  filter 方法用户过滤数组中的成员,满足条件的成员组成一个新的数组返回。他的参数是一个函数,所有数组成员一次执行该函数,返回结果为true的成员组成一个新的数组返回。改方法不会改变原来的数组。
  
  var arr = [1,5,3,2,4];
  
  arr.filter(function(elem){
  
  return elem > 3
  
  })
  
  // [5, 4]
  
  filter方法的参数函数也可以接受三个参数:当前成员,当前位置和整个数 组。
  
  [1, 2, 3, 4, 5].filter(function (elem, index, arr) {
  
  return index % 2 === 0;
  
  });
  
  // [1, 3, 5]
  
  此外,filter方法也可以接受第二个参数,用来绑定参数函数内部的this变量。
  
  var obj = { MAX: 3 }; var myFilter = function (item) {
  
  if (item > this.MAX) return true;
  
  };
  
  var arr = [2, 8, 3, 4, 1, 3, 2, 9];
  
  arr.filter(myFilter, obj)
  
  // [8, 4, 9]

转载于:https://www.cnblogs.com/qwangxiao/p/10837270.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值