Es6学习笔记(7)----数组的扩展

参考书《ECMAScript 6入门》
http://es6.ruanyifeng.com/

数组的扩展

1.扩展运算符:可以将数组转化成逗号隔离的单个参数
...[1,2,3] //控制台运行报错
console.log(...[1,2,3]);//1,2,3

(1)代替apply方法
function test(a,b){return a b;}
test.apply(null,[1,2]) 同 test(...[1,2]) 作用一样
(2)复制数组
var arr1 = [1,2,3],var arr2 = [];
arr2 = arr1.concat();
arr2 = [...arr1] 或 [...arr2] = arr1 //同样可达到复制数组的效果
改变arr2的值也不会影响到arr1
(3)合并数组
将arr2追加到arr1的尾部
var arr1 = [1,2,3],arr2 = [4,5,6],arr3;
Array.prototype.push.apply(arr1,arr2); 同 arr1.push(...[arr2]);作用一样
arr3 = [...arr1,...arr2] //[1,2,3,4,5,6]
(4)与解构赋值结合来赋值
[a,...b] = [1,2,3,4,5] // a---1, b---->[2,3,4,5]
(5)将字符串转为数组
let str = "word";
console.log(...str);//['w','o','r','d']
还可以识别unicode编码超过\uFFFF 需要用四个字节表示的字符 var str = "asdc𠮷";console.log([...str].length) //5 "𠮷"是一个四字节的字符,str.length = 6 不准确,错把四字节字符判断成两个字符,[...str].length更准确

(6)可以将有Iterator接口的对象转化为数组,如nodelist
var nodes = document.querySelectorAll('div');
[...nodes] //转化为节点数组
Map,Set数据结构和Generator函数都有迭代器接口,可以使用扩展运算符

数组实例方法的扩展
(1)Array.prototype.from:可以将类数组对象和带有Iterator接口的对象转化成数组
类数组对象:必须要有length属性,Array.from转化时会把空位认为是undefined。如果length值与属性个数不对应,多于属性个数的的值是undefiend,少于属性个数的部分都被去掉。
var obj = {
  0 : "n1",
  1 : "n2",
  2 : "n3",
  length : 3
}
Array.from(obj) //["n1", "n2", "n3"]
[].slice.call(obj) //["n1", "n2", "n3"]
带有Iterator接口的对象:常见的如dom树,可以通过Array.from转成数组
var nodes = document.querySelectorAll('div');
Array.from(nodes);

(2)Array.of()总是返回由参数组成的数组,如果没有则返回空数组
Array.of(3) //[3]
new Array(3) //[,,,]
Array.of({"n1" : 1},{"n2" : 2},{"n3" : 3})//[{"n1" : 1},{"n2" : 2},{"n3" : 3}]
(3)Array.prototype.copyWithin : 将指定位置的数组成员赋值到其他位置(覆盖原位置成员),返回当前数组。
有三个参数,第一个代表开始替换数据的位置,第二个代表开始读取的位置(包括),第三个代表结束读取的位置(不包括)
[1,2,3,4,5,'m',6,7,8,9,0].copyWithin(0,6,11) //[6, 7, 8, 9, 0, "m", 6, 7, 8, 9, 0]
(4)Array.prototype.find与Array.prototype.findIndex
相同点:都可以接受两个参数,第一个参数是回调函数,第二个参数可以是一个对象,用来为第一个参数回调函数提供this;
        第一个参数是回调函数,此回调函数可以有三个参数,第一个是当前的数组元素值,第二个是当前元素的下标值,第三个参数是一个数组。
不同点:find用于找出第一个满足要求的数组成员,如果没有满足条件的,则返回undefined。
        findIndex用于找出第一个满足要求的数组成员的位置下标,如果没有满足条件的,则返回-1。

[1,2,3,4,5].find(function(v,i,arr){v = v 2;arr = [];arr.push(v);console.log(i);console.log(arr)})
0 [3]
1 [4]
2 [5]
3 [6]
4 [7]

[1,2,3,4,5].findIndex(function(v,i,arr){return v === 5});
//4 数组元素5的下标

(5)Array.prototype.fill 用于填充数组
    可以接受三个参数,第一个是要填充的值,第二个是填充开始的位置(包括),第三个是填充结束的位置(不包括,填充在此前结束)。
   如果只传第一个参数,不指定第二第三个位置参数,则原有数组的值全部会被新的填充值取代。
   生成数组元素为0的长度为10的数组
   Array.from({length:0}).fill(0)//[0,0,0,0,0,0,0,0,0,0]
   使用fill像数组中填充新对象或者新数组时,不是深拷贝
  let array = Array.from({length:3}).fill({"name" : "test"})
  //array   (3) [{name: "test"}, {name: "test"}, {name: "test"}]
  array[0].name = "thisone" //改变第一个元素的属性值
  //array   (3) [{name: "thisone"}, {name: "thisone"}, {name: "thisone"}]
  array[0] = {"name" : "thattwo"} //整个赋值
  //array   (3) [{name: "thattwo"}, {name: "thisone"}, {name: "thisone"}]

(6)Array.prototype.keys //对键名进行遍历,返回遍历器对象
(7)Array.prototype.values //对值进行遍历,返回遍历器对象
(8)Array.prototype.entries//对整个键值对进行遍历,返回遍历器对象
var arr = [1,2,3,4,5];
for(let k of arr.keys()){
  console.log(k);//0 1 2 3 4
}
for(let v of arr.values()){
  console.log(v);//1 2 3 4 5
}
for(let entry of arr.entries()){
  console.log(entry);//[0,1] [1,2] [2,3] [3,4] [4,5]
}

(9)Array.prototype.includes 用于判断数组是否包含某元素,是则返回true,否则返回false
   有两个参数,第一个参数值要判断是否存在的值,第二个表示判断开始的位置(此参数如果为负,则倒数开始)
(10)Array.prototype.indexOf 用于判断数组是否包含某元素,如果存在,返回此元素在数组中的下标,如果不存在,则返回-1
   [NaN].indexOf(NaN) // -1
   [NaN].includes(NaN) //true  includes方法更准确直观

(3)空位
  所有ES6新定义的数组实例的方法都会将空位处理成undefined
  Array.from({length:3}) //[undefined,undefined,undefined]
  var arr = [,,];
  for(let c of arr.keys()){console.log(c)} // 0 1
  for(let c of arr.values()){console.log(c)} // undefined undefined


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用jOOQ和JavaFX将SQL数据转换为图表

最近,我们已经展示了Java 8和函数式编程将如何为使用jOOQ和Java 8 lambda和Streams进行SQL数据的函数数据转换为Java开发人员带来新的视角。 今天,我们将这一步骤更进一步,将数据转换为JavaFX XYChart.Series以根据数据生成美观的条形图。 设…

有一只猪400斤,桥承重200斤,怎么过桥?

条件:1 猪是活猪,任何方案都不 能切割猪。2 故事发生在猪王国,不要引 入人的因素。3 是过桥,不是过河,不要 说游泳过去。4 是过桥,不是过涧,不要 说飞过去。5 桥是承重200斤的桥,把桥 挪到平地上抑或过另一…

node.js学习笔记(1)

一. 安装以及环境配置 安装路径 http://nodejs.cn/download/ 多种环境选择 环境变量的配置 Step1 先检查环境变量中的系统变量里面的path,查看是否加入了node.js 例如我的node.js安装路径是C:\Program Files\nodejs 那么,这个path里面就应该加…

do语句转化为局部函数一例

do: (do ((x a (b x)) (y c (d y))) ((test x y) (z x y)) (f x y)) 局部函数: (labels ((rec (x y) (cond ((test x y) (z x y)) (t (f x y) (rec (b x) (d y)))))) …

主要版本发布后Java开发人员应使用的15种工具

新部署的生存工具包:适用于Java开发人员的工具,这些工具经常将代码部署到生产中! Takipi会检测生产中的所有错误,并像发生错误时一样显示变量值 立即部署并获得免费的T恤 适用于新部署的终极生存套件 与在僵尸末日场景下玩弄&…

js dom node.children与node.childNodes区别

不同点:node.children不会取到节点下面的TextNode但是node.childNodes会取到 共同点:两者都是集合类数组,可以通过索引的方式取到值也可以用for循环遍历 更多专业前端知识,请上 【猿2048】www.mk2048.com

Java EE 7批处理和魔兽世界–第2部分

今天,我将把第二部分带到我以前关于Java EE 7批处理和《魔兽世界–第1部分》的帖子中。 在本文中,我们将了解如何从第1部分中获得的数据中汇总和提取指标。 概括 批处理目的是下载魔兽世界拍卖行的数据,处理拍卖并提取指标。 这些指标将建立…

js导航条 二级滑动 模仿块级作用域

for(var i 1;i<7;i){    //因为首级标题有6个&#xff0c;对每个首级标题添加mouseover和mouseout事件。    //这里用到块级作用域(function(k){document.getElementById("p_"k).addEventListener(mouseover,function(event){document.getElementById(p_…

js 中的console.log有什么作用

主要是方便你调式javascript用的。你可以看到你在页面中输出的内容。 相比alert他的优点是&#xff1a; 他能看到结构话的东西&#xff0c;如果是alert&#xff0c;淡出一个对象就是[object object],但是console能看到对象的内容。console不会打断你页面的操作&#xff0c;如…

太糟糕了,Java 8没有Iterable.stream()

这是最近比较有趣的Stack Overflow问题之一&#xff1a; 为什么Iterable不提供stream&#xff08;&#xff09;和parallelStream&#xff08;&#xff09;方法&#xff1f; 最初&#xff0c;直接将Iterable转换为Stream似乎很直观&#xff0c;因为在90&#xff05;的用例中&a…

struts+swfupload实现批量图片上传(上):swfupload

custom_settings : {progressTarget : "fsUploadProgress",cancelButtonId : "btnCancel",uploadButtonId : "btnUpload",myFileListTarget : "idFileList" },custom_settings调用方法 this.customSettings.cancelButtonId 缩略图js …

40行中的持久性KeyValue Server和一个可悲的事实

再次出现。. 回顾 Peters关于Unsafe用法的书面概述 &#xff0c;我将简要介绍一下Java中的低级技术如何通过启用更高级别的抽象或允许Java性能级别来节省开发工作可能很多人都不知道。 我的主要观点是表明&#xff0c;将对象转换为字节&#xff0c;反之亦然是一个重要的基础&a…

cookie 和session 的区别

session是保存在服务器端的&#xff0c;cookie是保存在客户端的。 二者的定义&#xff1a; 当你在浏览网站的时候&#xff0c;WEB 服务器会先送一小小资料放在你的计算机上&#xff0c;Cookie 会帮你在网站上所打的文字或是一些选择&#xff0c;都纪录下来。当下次你再光临同一…

javascript - dom

动态设置事件&#xff1a; 1. <input type"button" value"val1" οnclick"fn1();"/>; 2. ie支持 attachEventw3c标准 addEventListenerif (!window.event) {document.getElementById("btn").addEventListener("click…

ajax提交手机号去数据库验证并返回状态值

<script type"text/javascript">$(function(){$(.agree_regi).click(function(){var phone $.trim($("#phone").val());if(phone ""){NewAlert(2,"请输入手机号",null);return false;}else{var reg /^0?1[3|4|5|8|7][0-9]\d…

在同一台机器上启动多个JBoss A-MQ JVM

因此&#xff0c;我最近没有写过博客-只是很忙。 但是&#xff0c;我新年的决心是写一些博客&#xff0c;分享一些我经常遇到的事情&#xff0c;即使这些简单的事情可能会帮助一些人。 因此&#xff0c;对于本条目&#xff0c;我将展示一种在单台机器上启动多个JBoss A-MQ实例…

TreeMap源码分析——深入分析(基于JDK1.6)

TreeMap有Values、EntrySet、KeySet、PrivateEntryIterator、EntryIterator、ValueIterator、KeyIterator、DescendingKeyIterator、NavigableSubMap、AscendingSubMap、DescendingSubMap、SubMap、Entry共十三个内部类。Entry是在TreeMap中用于表示树的节点的内部类&#xff0…

使用Curator和ZooKeeper发现Hazelcast成员

在一个项目中&#xff0c;我正在私有云中设置Hazelcast集群。 在群集内&#xff0c;所有节点都必须互相看见&#xff0c;因此在引导过程中&#xff0c;Hazelcast将尝试查找其他群集成员。 没有服务器&#xff0c;并且所有节点都相等。 在Hazelcast中实现了多种发现成员的技术。…

Work Queue based multi-threading

http://www.codeproject.com/Articles/8886/Work-Queue-based-multi-threading转载于:https://www.cnblogs.com/hongjiumu/archive/2013/01/06/2846946.html

功能介面

目录 1.简介 2.理由 3. Lambda表达式 4.谓词<T> 5. BiPredicate <T&#xff0c;U> 6.函数<T&#xff0c;R> 7. BiFunction <T&#xff0c;U&#xff0c;R> 8.消费者<T> 9. BiConsumer <T&#xff0c;U> 10.供应商<T> 11.一元运算符&…