接着上一篇,给大家再分享一些数组的其他方法.大家也可以去点击这里学习数组更多的方法

concat方法:

概述:    concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回.

参数:

valueN:需要与原数组合并的数组或非数组值。

描述:

concat 方法将创建一个新的数组,然后将调用它的对象(this 指向的对象)中的元素以及所有参数中的数组类型的参数中的元素以及非数组类型的参数本身按照顺序放入这个新数组,并返回该数组.

concat方法并不修改调用它的对象(this 指向的对象) 和参数中的各个数组本身的值,而是将他们的每个元素拷贝一份放在组合成的新数组中.原数组中的元素有两种被拷贝的方式:

  • 对象引用(非对象直接量):concat 方法会复制对象引用放到组合的新数组里,原数组和新数组中的对象引用都指向同一个实际的对象,所以,当实际的对象被修改时,两个数组也同时会被修改.
  • 字符串和数字(是原始值,而不是包装原始值的 String 和Number 对象): concat 方法会复制字符串和数字的值放到新数组里.

示例:

      var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7, 8, 9];
console.log(num1.concat(num2, num3));//组成新数组[1, 2, 3, 4, 5, 6, 7, 8, 9]; 原数组 num1, num2, num3 未被修改
console.log(num1);//[1, 2, 3]
console.log(num2);//[4, 5, 6]
console.log(num3);//[7, 8, 9]
console.log(num1.concat(null, [1,'a','b',,'f'])+'concat方法');//1,2,3,,1,a,b,,fconcat方法

通过以上代码,大家会发现concat不会改变调用该方法的数组,并且会被没有值的索引调用.

splice()方法:

概述:    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

参数:

start​:从数组的哪一位开始修改内容。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位。

deleteCount:整数,表示要移除的数组元素的个数。如果 deleteCount 是 0,则不移除元素。这种情况下,至少应添加一个新元素。如果 deleteCount大于start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。

    itemN:要添加进数组的元素。如果不指定,则 splice() 只删除数组元素。

描述:

如果添加进数组的元素个数不等于被删除的元素个数,数组的长度会发生相应的改变。

示例:

示例1:

      var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7,,9,10,11];
console.log(num1.splice(1,0,'4'));//[]
console.log(num1);//[1, "4", 2, 3]
console.log(num2.splice(1,1,'y'));//[5]
console.log(num2);//[4, "y", 6]
console.log(num3.splice(1,0,8));//[]
console.log(num3);//[7, 8, 3: 9, 4: 10, 5: 11]

示例2:

      var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7,,9,10,11];
console.log(num1.splice(-1,0,'4'));//[]
console.log(num1);//[1, 2, "4", 3]
console.log(num2.splice(-1,1,'y'));//[5]
console.log(num2);//[4, "y", 6]
console.log(num3.splice(-1,0,8));//[]
console.log(num3);//[7, 8, 3: 9, 4: 10, 5: 11]

unshift方法:

概述:    unshift() 方法在数组的开头添加一个或者多个元素,并返回数组新的 length 值。

参数:

element1, ..., elementN:要添加到数组开头的元素。

描述:

unshift 方法会在调用它的类数组(array-like)对象的开始位置插入给定的参数。

示例:

      var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
console.log(num1.unshift(1,'4'));//
console.log(num1);//[1, "4", 1, 2, 3]
console.log(num2.unshift(1,1,'4'));//
console.log(num2);//[1, 1, "4", 4, 5, 6]

push方法:

概述:   push() 方法添加一个或多个元素到数组的末尾,并返回数组新的长度(length 属性值)。

描述:

elementN:被添加到数组末尾的元素。

示例:

示例1:

      var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7, 8, 9,,11];
console.log(num1.push(num2));//4
console.log(num1+'push方法');//1,2,3,4,5,6push方法
console.log(num2);//[4, 5, 6]
console.log(num2.push(num3));//4
console.log(num2+'push方法');//4,5,6,7,8,9,,11push方法
console.log(num3);//[7, 8, 9, 4: 11]

示例2:

      var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7, 8, 9,,11];
console.log(num3.push(num2));//6
console.log(num3+'push方法');//7,8,9,,11,4,5,6push方法

shift方法:

概述:   shift() 方法删除数组的 第一个 元素,并返回这个元素。该方法会改变数组的长度。

描述:

shift 方法移除索引为 0 的元素(即第一个元素),并返回被移除的元素,其他元素的索引值随之减 1。如果length 属性的值为 0 (长度为 0),则返回 undefined

shift 方法并不局限于数组:该方法亦可通过 call 或 apply 作用于对象上。对于不包含 length 属性的对象,将添加一个值为 0 的 length 属性。

示例:

      var num1 = [1, 2, 3];
console.log(num1.shift());//
console.log(num1);//[2, 3]

pop方法:

概述:   pop() 方法删除一个数组中的最后的一个元素,并且返回这个元素。

描述:

pop 方法删除一个数组中的最后一个元素,并且把这个删除掉的元素返回给调用者。

pop 被有意设计成具有通用性,该方法可以通过 call 或 apply 方法应用于一个类数组(array-like)对象上。

示例:

      var num1 = [1, 2, 3];
console.log(num1.pop());//3
console.log(num1);//[1, 2]

copyWithin方法:

概述:    copyWithin() 方法会浅拷贝数组的部分元素到同一数组的不同位置,且不改变数组的大小,返回该数组。

参数:

target:0 为基底的索引,复制序列到该位置。如果是负数,target 将从末尾开始计算。如果 target 大于等于 arr.length,将会不发生拷贝。如果 target 在 start 之后,复制的序列将被修改以符合 arr.length

    start:0 为基底的索引,开始复制元素的起始位置。如果是负数,start 将从末尾开始计算。如果 start 被忽略,copyWithin 将会从0开始复制。

end:0 为基底的索引,开始复制元素的结束位置。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。如果是负数, end 将从末尾开始计算。如果 end 被忽略,copyWithin 将会复制到 arr.length

描述:

参数target,start和end 必须为整数。

如果start为负,则其指定的索引位置等同于length+start,length为数组的长度。end也是如此。

copyWithin方法不要求其this值必须是一个数组对象;除此之外,copyWithin是一个可变方法,它可以改变this对象本身,并且返回它,而不仅仅是它的拷贝。

copyWithin 就像 C 和 C++ 的 memcpy 函数一样,且它是用来移动 Array 或者 TypedArray 数据的一个高性能的方法。复制以及粘贴序列这两者是为一体的操作;即使复制和粘贴区域重叠,粘贴的序列也会有拷贝来的值。

copyWithin 函数是设计为通用的,其不要求其 this 值必须是一个数组对象。

The copyWithin 是一个可变方法,它不会改变 this 的 length,但是会改变 this 本身的内容,且需要时会创建新的属性。

示例:

      console.log(['a','b','d','f'].copyWithin(-1));//["a", "b", "d", "a"]
console.log(['a','b','d','f'].copyWithin(-2));//["a", "b", "a", "b"]
console.log(['a','b','d','f'].copyWithin(-3));//["a", "a", "b", "d"]
console.log('俩参数');
console.log(['a','b','d','f','g'].copyWithin(0,-1));//["g", "b", "d", "f", "g"]
console.log(['a','b','d','f','g'].copyWithin(0,-2,-1));//["f", "b", "d", "f", "g"]
console.log(['a','b','d','f','g'].copyWithin(0,-3,-1));//["d", "f", "d", "f", "g"]
console.log(['a','b','d','f','g','e'].copyWithin(0,-5,-1));//["b", "d", "f", "g", "g", "e"]
//总结每当copy后的数组大于本数组的长度时,该数组的值=copy-1,原数据删除中间多余的
//例如 ['a','b','d','f','g','e'].copyWithin(0,-5,-1) 执行本应是(-5,-1) :b,d,f,g原来的数:b,d,f,g,e
//由于超出原来数组的长度删除 b,d,f,
//所以最终结果为:b,d,f,g,g,e
console.log('参数为正整数');
console.log(['a','b','d','f','g','e'].copyWithin(1,1,3));//["a", "b", "d", "f", "g", "e"]
console.log(['a','b','d','f','g','e'].copyWithin(2,1,5));//["a", "b", "b", "d", "f", "g"]
console.log(['a','b','d','f','g','e'].copyWithin(2,1,5));//["a", "b", "b", "d", "f", "g"]
console.log('哈哈哈222');
console.log(['a','b','d','f'].copyWithin(1,-1,-3));//["a", "b", "d", "f"]

es6学习笔记一数组(中)的更多相关文章

  1. es6学习笔记一数组(上)

    最近公司没什么事情,我们老大让我看看es6,小颖就练习了下数组的各个方法,今天先给大家分享一部分.嘻嘻,希望对大家有所帮助. every方法: 概述:    every() 方法测试数组的所有元素是否 ...

  2. ES6学习笔记之数组的扩展

    ✏️1. 扩展运算符 扩展运算符(spread)是三个点(...),将一个数组转为用逗号分隔的参数序列. 普通用法 console.log(...[1,2,3]);//1 2 3 数组拷贝(普通类型深 ...

  3. ES6学习笔记之数组

    1.拓展运算符 含义 拓展运算符是三个点(...),功能是将数组或类数组对象展开成一系列用逗号隔开的值.如下面代码: console.log(...[1, 2, 3]); //1 2 3 consol ...

  4. es6学习笔记一数组(下)

    entries() 方法: 概述:    entries() 方法返回一个 Array Iterator(数组迭代) 对象,该对象包含数组中每一个索引的键值对. 示例: let arr = [&quo ...

  5. ES6学习笔记(数组)

    1.扩展运算符:, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 用于函数调用 function add(x, y) { r ...

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

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 数组的扩展 1.扩展运算符:可以将数组转化成逗号隔离的单个参数...[1,2,3] //控制台运 ...

  7. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  8. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  9. ES6学习笔记之块级作用域

    ES6学习笔记:块级作用域 作用域分类 全局作用域 局部作用域 块级作用域 全局作用域示例 var i=2; for (var i = 0; i < 10; i++) { } console.l ...

随机推荐

  1. 20161023 NOIP 模拟赛 T2 解题报告

    Task 2.回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他 ...

  2. Where product development should start

    We all need to know our customers in order to create products they’ll actually buy. This is why the  ...

  3. Web前端开发推荐阅读书籍

    前言 前端工程师在中国兴起也就5年左右,以前公司里没有专门前端工程师的这个职位,很多前端方面的任务都是由全栈工程师来完成,有的基础一点的后台或者设计的帮助分担一些.但是随着互联网的快速发展,特别是所谓 ...

  4. SSE: server-sent events

    当客户端需要定时轮询服务器获取一些消息的时候,可以使用 servser-sent events .NET 服务端: public void ProcessRequest(HttpContext con ...

  5. 浅谈Js对象的概念、创建、调用、删除、修改!

    一.我们经常困惑,对象究竟是什么,其实这是一种思维,一种意识上的东西,就像我们都说    世界是有物质组成的道理一样,理解了下面的几句话!对象也不是那么抽象!    1.javascript中的所有事 ...

  6. 初学java之12 泛型编程的个人理解总结

    首先,强调一个观点: 对于我这样的初学者,一定要站在虚拟机和编译器的角度来分析java 语言的种种特性,泛型也不例外.(我认为这个一条正确的学习经验) 写这篇文章起源于最近在学java,有一天在路上和 ...

  7. maven web项目中web.xml

    web.xml 不是web工程必须的. web.xml文件用来配置那些东西:欢迎页,servlet,filter等. web.xml文件中定义了多少种标签元素,web.xml 中就可以出现它的模式文件 ...

  8. 执行jar文件生成pdf报错,Unsupported URL <file:///home

    java -Djava.library.path=/usr/local/lib/ruby/gems/1.8/gems/sharp_office-1.0.1/ext/sigar -jar /usr/lo ...

  9. Android操作HTTP实现与服务器通信(转)

    Android操作HTTP实现与服务器通信   本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方 ...

  10. 安装subversion

    安装subversion需要依赖apr.apr-util.sqlite 下载安装包,放在/usr/file目录 subversion-1.9.4.tar.gz apr-1.5.2.tar.gz apr ...