[VueJsDev] 目录列表

https://www.cnblogs.com/pengchenggang/p/17037320.html

ES6循环使用手册

::: details 目录

:::

数组的循环 对象的循环 备查

Array. 1: filter() 方法

  • 实例1:返回大于18的数组字

返回数组 ages 中所有元素都大于 18 的元素:

var ages = [32, 33, 16, 40];

function checkAdult(age) {
return age >= 18;
} function myFunction() {
document.getElementById("demo").innerHTML = ages.filter(checkAdult);
}

输出结果为: 32,33,40

定义和用法

  • filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
  • 注意: filter() 不会对空数组进行检测。
  • 注意: filter() 不会改变原始数组。

语法

array.filter(function(currentValue,index,arr), thisValue)

参数说明

参数 描述
function 必须。函数,数组中的每个元素都会执行这个函数
currentValue 必须。当前元素的值
index 可选。当前元素的索引值
arr 可选。当前元素属于的数组对象
thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"

技术细节

参数 描述
返回值: 返回数组,包含了符合条件的所有元素。如果没有符合条件的元素则返回空数组。
JavaScript 版本: 1.6

更多实例

  • 返回数组 ages 中所有元素都大于输入框指定数值的元素:
<p>最小年龄: <input type="number" id="ageToCheck" value="18"></p>
<button onclick="myFunction()">点我</button> <p>所有大于指定数组的元素有? <span id="demo"></span></p> <script>
var ages = [32, 33, 12, 40]; function checkAdult(age) {
return age >= document.getElementById("ageToCheck").value;
} function myFunction() {
document.getElementById("demo").innerHTML = ages.filter(checkAdult);
}
</script>

Array. 2: forEach

语法

array.forEach(function(currentValue, index, arr), thisValue)

特性

  • 单纯的循环数组的每个数据

Array. 3: for循环

代码

for (var num =1; num<=10; num++) {
document.write(num+" <br />"); //1 2 3 4 5 6 7 8 9 10
}

Array. 4: map()循环

map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。

注意:是返回一个新数组,而不会改变原数组。

var numbers = [1, 2, 3];

numbers.map(function (n) {
return n + 1;
});
// [2, 3, 4] numbers // [1, 2, 3]

map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。

[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
// [0, 2, 6]

此外,map()循环还可以接受第二个参数,用来绑定回调函数内部的this变量,将回调函数内部的this对象,指向第二个参数,间接操作这个参数(一般是数组)。

var arr = ['a', 'b', 'c'];

[1, 2].map(function (e) {
return this[e];
}, arr)
// ['b', 'c']

Array. 5: some(),every()循环遍历

::: tip

some(),every()循环遍历,统计数组是否满足某个条件

:::

  • 这两个方法类似“断言”(assert),返回一个布尔值,表示判断数组成员是否符合某种条件。
  • 它们接受一个函数作为参数,所有数组成员依次执行该函数。该函数接受三个参数:当前成员、当前位置和整个数组,然后返回一个布尔值。
  • some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。
var arr = [1, 2, 3, 4, 5];
arr.some(function (elem, index, arr) {
return elem >= 3;
});
// true

而every方法则相反,所有成员的返回值都是true,整个every方法才返回true,否则返回false。两相比较,some()只要有一个是true,便返回true;而every()只要有一个是false,便返回false.

var arr = [1, 2, 3, 4, 5];
arr.every(function (elem, index, arr) {
return elem >= 3;
});
// false

这两个方法在实际开发中,大有可用之处。比如在判定用户是否勾选了不可操作的数据,或者是否勾选了一条可以操作的数据可以使用这两个方法遍历循环数组。

Array. 6: reduce(),reduceRight()

reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。

[1, 2, 3, 4, 5].reduce(function (a, b) {
console.log(a, b);
return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后结果:15

reduce方法和reduceRight方法的第一个参数都是一个函数。该函数接受以下四个参数。

  • 累积变量,total 默认为数组的第一个成员
  • 当前变量,value 默认为数组的第二个成员
  • 当前位置 index(从0开始)
  • 原数组 arr 这四个参数之中,只有前两个是必须的,后两个则是可选的。

如果要对累积变量指定初值,可以把它放在reduce方法和reduceRight方法的第二个参数。

[1, 2, 3, 4, 5].reduce(function (a, b) {
return a + b;
}, 10);
// 25

上面的第二个参数相当于设定了默认值,处理空数组时尤其有用,可避免一些空指针异常。

由于这两个方法会遍历数组,所以实际上还可以用来做一些遍历相关的操作。比如,找出字符长度最长的数组成员。

function findLongest(entries) {
return entries.reduce(function (longest, entry) {
return entry.length > longest.length ? entry : longest;
}, '');
} findLongest(['aaa', 'bb', 'c']) // "aaa"

上面代码中,reduce的参数函数会将字符长度较长的那个数组成员,作为累积值。这导致遍历所有成员之后,累积值就是字符长度最长的那个成员

Object. 7: for-in遍历

  • for-in 循环主要用于遍历对象
  • for()中的格式:for(keys in zhangsan){}
  • keys表示obj对象的每一个键值对的键!!所有循环中,需要使用obj[keys]来取到每一个值!!!
  • for-in 循环,遍历时不仅能读取对象自身上面的成员属性,也能延续原型链遍历出对象的原型属性
  • 所以,可以使用hasOwnProperty判断一个属性是不是对象自身上的属性。
  • obj.hasOwnProperty(keys)==true 表示这个属性是对象的成员属性,而不是原先属性
//声明一个Peson类
function Person(){
this.name = "张三";
this.age = 14;
this.func1 = function(){ }
}
//实例化这个类
var zhangsan = new Person();
//使用for-in遍历这个对象
for(keys in zhangsan){
console.log(zhangsan[keys])
}

Object. 8: Object.values()

Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

::: tip

Object.values(obj)

:::

var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42] // array like object
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c'] // array like object with random key ordering
// when we use numeric keys
// the value returned in a numerical order according to the keys
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a'] // getFoo is property which isn't enumerable
var my_obj = Object.create({}, {
getFoo: { value: function() { return this.foo; } }
}); my_obj.foo = 'bar';
console.log(Object.values(my_obj)); // ['bar'] // non-object argument will be coerced to an object
console.log(Object.values('foo')); // ['f', 'o', 'o']

Object. 9: Object.keys遍历属性

Object.keys 方法的参数是一个对象,返回一个数组。该数组的成员都是该对象自身的(而不是继承的)所有属性名,且只返回可枚举的属性

var obj = {
p1: 123,
p2: 456
}; Object.keys(obj) // ["p1", "p2"]

Object. 10: Object.getOwnPropertyNames()遍历属性

Object.getOwnPropertyNames 方法与 Object.keys 类似,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。但它能返回不可枚举的属性。

var a = ['Hello', 'World'];

Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]

ArrObj. 11: for-of循环(ES6)

  • 全能循环 得value值
  • ES6 借鉴 C++、Java、C# 和 Python 语言,引入了for...of循环,作为遍历所有数据结构的统一的方法。

::: tip

  • 一个数据结构只要部署了Symbol.iterator属性,就被视为具有iterator接口,就可以用for...of循环遍历它的成员。也就是说,for...of循环内部调用的是数据结构的Symbol.iterator方法。
  • for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。

    :::
var arr = ['a', 'b', 'c', 'd'];

for (let a in arr) {
console.log(a); // 0 1 2 3
} for (let a of arr) {
console.log(a); // a b c d
}

上面代码表明,for...in循环读取键名,for...of循环读取键值。如果要通过for...of循环,获取数组的索引,可以借助数组实例的entries方法和keys方法

与其他遍历语法的比较

for...in循环有几个缺点

  1. 数组的键名是数字,但是for...in循环是以字符串作为键名“0”、“1”、“2”等等。
  2. for...in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
  3. 某些情况下,for...in循环会以任意顺序遍历键名。

for...in循环主要是为遍历对象而设计的,不适用于遍历数组。

for...of循环

  1. 有着同for...in一样的简洁语法,但是没有for...in那些缺点。
  2. 不同于forEach方法,它可以与break、continue和return配合使用。
  3. 提供了遍历所有数据结构的统一操作接口。

[VueJsDev] 基础知识 - ES6循环使用手册的更多相关文章

  1. 1.6 Python基础知识 - for循环

    在循环语句中,除了while循环外,还有一种循环叫for循环的循环语句,for循环语句用于遍历可迭代(什么是迭代?以及迭代的相关知识,我们到后面再进行阐述,这里只要记住就可以了.)对象集合中的元素,并 ...

  2. C语言基础知识【循环】

    C 循环1.有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推.编程语言提供了更为复杂执行路径的多种控制结构.循环语句允许我 ...

  3. 1.5 Python基础知识 - while循环

    在我们生活中有很多反复要做的事情,或者动作,我们称之为循环.在开发程序中也会有循环的事情要去做,就是需要反复的去执行某个代码,或者反复进行某种演算,直到达到某种条件的时候才会停止.在Python中我们 ...

  4. python基础知识(循环语句)

    for循环.while循环.循环嵌套 for 迭代变量 In 对象: 循环体 range(start,end,step) 第一个和第三个可以省略生成一系列的连续整数 start 包括起始值 end  ...

  5. Bash的基础知识man手册

    Bash的基础知识man手册 由于基于Android类设备的渗透测试都是通过各类终端实现.所以掌握Shell相关操作就显得尤为重要.Bash是一个为GNU计划编写的Unix Shell本文选自基于An ...

  6. python-基础-基础知识-变量-选择-循环

    1 基础知识 1.1 注释的分类 1.2 变量以及类型 变量定义 num1 = 100 #num1就是一个变量,就好一个小菜篮子 num2 = 87 #num2也是一个变量 result = num1 ...

  7. PHP丨PHP基础知识之流程控制WHILE循环「理论篇」

    昨天讲完FOR循环今天来讲讲他的兄弟WHILE循环!进入正题: while是计算机的一种基本循环模式.当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环.while语句的一般表达式为:whil ...

  8. SWIG 3 中文手册——5. SWIG 基础知识

    目录 5 SWIG 基础知识 5.1 运行 SWIG 5.1.1 输入格式 5.1.2 SWIG 输出 5.1.3 注释 5.1.4 C 预处理器 5.1.5 SWIG 指令 5.1.6 解析限制 5 ...

  9. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  10. OV摄像头图像采集基础知识总结

    目前FPGA用于图像采集 传输 处理 显示应用越来越多,主要原因是图像处理领域的火热以及FPGA强大的并行处理能力.本文以OV7725为例,对摄像头使用方面的基础知识做个小的总结,为后续做个铺垫. 下 ...

随机推荐

  1. 使用visio如何快速生成一个网格状图案,文档技巧!

    如何使用visio如何快速生成一个网格状图案 我的成果图: 操作步骤如下: 1.新建一个visio文件,选择"基本框图".点击创建. 2.从左侧形状窗口中基本形状中选中正方形拖动到 ...

  2. Python 调用Zoomeye搜索接口

    钟馗之眼是一个强大的搜索引擎,不同于百度谷歌,它主要收集网络中的主机,服务等信息,国内互联网安全厂商知道创宇开放了他们的海量数据库,对之前沉淀的数据进行了整合.整理,打造了一个名符其实的网络空间搜索引 ...

  3. Umi配置路由

    一.Umi路由的概念 在 Umi 中,你可以在 config/config.js 文件中使用 routes 属性来配置路由.routes 属性是一个数组,每个元素都表示一个路由对象.每个路由对象都包含 ...

  4. 除了mysql 和 sql server, 你还有另外一种选择 postgreSQL

    数据库的重要性,不用多说.数据库的名字,大家应该也知道很多.就国内来说,使用者最多的应该是mysql 和sql server,大企业用ORACLE的也不在少数. 就我个人而言,在使用.NET的时候,基 ...

  5. SecureCRT终端显示中文乱码问题的解决方案

    错误描述:在windows10下通过SecureCRT远程连接Linux终端时,如果Linux里面存放有带有中文的文件或文件名,那么SecureCRT终端就会显示乱码. 错误记录:如下图所示,在我的文 ...

  6. 零基础入门学习Java课堂笔记 ——day05

    面向对象(上) 面向过程:我打算列个计划表一步一步来 面向对象:我喜欢先分析分类,把复杂的问题简单化 1.什么是面向对象!!? 面向对象的本质就是:以类的方式组织代码,以对象的方式组织数据 封装 继承 ...

  7. .NET 云原生架构师训练营(模块二 基础巩固 EF Core 关系)--学习笔记

    2.4.4 EF Core -- 关系 一对多 一对一 多对多 示例 关系:https://docs.microsoft.com/zh-cn/ef/core/modeling/relationship ...

  8. .NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记

    2.2.2 核心模块--日志 ILogger 的使用 日志的 ID 日志的分类 日志的级别 LoggerProvider 日志的最佳实践 .NET Core 和 ASP.NET Core 中的日志记录 ...

  9. ES6学习 第一章 let 和 const 命令

    前言: 最近开始看阮一峰老师的<ECMAScript 6 入门>(以下简称原文)学习ECMAScript 6(下文简称ES6)的知识,整理出一些知识点加上我的理解来做成文章笔记.按照章节为 ...

  10. 【Unity3D】基于模板测试和顶点膨胀的描边方法

    1 前言 ​ 选中物体描边特效 中介绍了基于模板纹理模糊膨胀的描边方法,该方法实现了软描边,效果较好,但是为了得到模糊纹理,对屏幕像素进行了多次渲染,效率欠佳.本文将介绍另一种描边方法:基于模板测试和 ...