javascript语言精粹数组篇之Array的方法注意事项
本文并没有详细列出Array方法详解,本文侧重点在于使用Array编程时候要注意的问题。
1.Array.concat
var o = {name:"Gavin"}; var a1 = [1,2,3]; var a2 = [6,o]; var arr1 = a1.concat(a2); a1[0] = 0; o.name = "GavinPan"; console.log(arr1);//[ 1, 2, 3, 6, {name:"GavinPan"} ]
concat 将两个数组浅拷贝连接
2.Array.join
var o2 = {name:"Gavin"}; var arr2 = ['a', 1, o2]; var str2 = arr2.join(''); console.log(str2);//a1[object Object]
join 会把数组的每一项变成字符串,再把数组变成字符串。
在IE6、7的时代使用jion去连接大量字符串要优于使用+号,目前建议使用+号连接,参考《高性能网站进阶指南》中字符串优化
3. Array.pop Array.push
可以这样实现,只是提供一种思路
// Array.method('pop', function () {
// return this.splice(this.length-1,1)[0];
// });
// Array.method('pop', function () {
// this.splice.apply(
// this, [this.length, 0].concat(Array.prototype.slice.apply(arguments))
// );
// return this.length;
// });
4. Array.reverse
var arr4 = [1,2,3]; var a4 = arr4.reverse(); arr4[2] = 'reverse'; console.log(arr4); //Array(3) [ 3, 2, "reverse" ] console.log(a4); //Array(3) [ 3, 2, "reverse" ]
reverse 将数组翻转,返回数组本身。arr4 与 a4 是一个数组。
5. Array.shift
移除数组第一项,比Array.pop要慢的多
6.Array.slice(start, end)
对数组的一段做浅拷贝,end省略表示一直到最后
7.Array.sort
数组排序,会把元素视为字符串,不靠谱,建议自己写。
8.Array.splice(index, count, item...)
var arr8 = [1,2,3]; var a8 = arr8.splice(1, 1,'a','b'); console.log(arr8); //[ 1, "a", "b", 3 ] console.log(a8); //[ 2 ]
splice 从index索引位置删除count个数的项,返回数组删除项。如果item不为空将在index索引位置添加item项。注意不要混淆slice,slice是浅拷贝一段数组。
9.Array.unshif
//把元素添加到数组的第一项
// Array.method('unshif', function(){
// this.splice.applay(this, [0 ,0].concat(Array.prototype.slice.apply(arguments)));
// return this.length;
// });
Array.prototype.unshif1 = function(){ console.log(`----`) console.log(Array.prototype.slice.apply(arguments)); this.splice.apply(this, [0 ,0].concat(Array.prototype.slice.apply(arguments))); return this.length; }; var arr9 = [1,2,3,4]; arr9.unshif1('a','b'); console.log(arr9)
有关slice填坑,w3cschool arrayObject.slice(start,end) start 必需,但是以下结果是对的。MND中给的答案正确 arr.slice([begin[, end]]),slice可以什么参数都不传。
var arrtest = [1,2,3]; var arrtest1 = arrtest.slice(); console.log(arrtest1);
扩展解释
Array.prototype.slice.apply(arguments),这么写的原因是,arguments 是类似数组的对象,他不是数组,所以不能使用数组的方法slice,通过apply去调用数组的slice方法,结果返回数组。
arr9.unshif1('a','b'); 可以看做 arr9.splice(0, 0, 'a', 'b');
javascript语言精粹数组篇之Array的方法注意事项的更多相关文章
- Javascript语言精粹之Array常用方法分析
Javascript语言精粹之Array常用方法分析 1.Array常用方法分析 1.1 Array.prototype.sort() Javascript的默认比较函数假定被排序元素都是字符串,所以 ...
- JavaScript语言精粹 笔记04 数组
数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...
- Javascript 语言精粹 代码片段合集
Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...
- JavaScript 语言精粹笔记3
方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...
- 《JavaScript语言精粹》小记
一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...
- javascript语言精粹
内容选自:<javascript语言精粹> 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'num ...
- 《JavaScript语言精粹》学习笔记
一.in的用法 for...in 枚举一个对象的所有可枚举属性 检测DOM/BOM属性 if ("onclick" in elem) { // 元素支持onclick } if ( ...
- Javascript语言精粹之String常用方法分析
Javascript语言精粹之String常用方法分析 1. String常用方法分析 1.1 String.prototype.slice() slice(start,end)方法复制string的 ...
- JavaScript语言精粹 笔记06 方法
JS包含了少量可用在标准类型上的标准方法. ArrayFunctionNumberObjectRegExpString Array array.concat(item...) concat方法返回一个 ...
随机推荐
- linux初学者-firewall篇
linux初学者-firewall篇 firewalld是防火墙的另一种程序,与iptables相同,但是使用起来要比iptables简单的点,不需要了解3张表和5条链也可以使用. 1.firewa ...
- C# sql 批量插入数据库的语句
//执行DataTable数据导入 public static int UpdateDt(string strConn, DataTable dt) { try { string tablaName ...
- [重磅开源] 比SingleR更适合的websocket 即时通讯组件---ImCore开源了
有感而发 为什么说 SignalR 不合适做 IM? IM 的特点必定是长连接,轮训的功能用不上. 因为它是双工通讯的设计,用hub.invoke发送命令给服务端处理业务,其他就和 ajax 差不多, ...
- Oracle中ROWNUM伪列和ROWID伪列的用法与区别
做过Oracle分页的人都知道由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去满足分页功能,在此,不谈分页方法,只从根本上去介绍这两 ...
- 优雅的对象转换解决方案-MapStruct使用进阶(二)
在前面, 介绍了 MapStruct 及其入门. 本文则是进一步的进阶. 在 MapStruct 生成对应的实现类的时候, 有如下的几个情景. 1 属性名称相同,则进行转化 在实现类的时候, 如果属性 ...
- 【Java例题】4.1 级数求和1
1. 计算级数之和: y=1-1/2+1/4-1/8+...+ (-1)^(n-1)/2^(n-1). 这里的"^"表示乘方. package chapter4; import j ...
- Linux下Docker以及portainer相关配置
一.安装使用Docer CE 本文以CentOS 7为例,安装docker CE版本,docker有两种版本,社区版本CE和企业版本EE,此处学习研究以CE版本为例, 两种安装方式可选:1.使用yum ...
- kafka消息的处理机制(五)
这一篇我们不在是探讨kafka的使用,前面几篇基本讲解了工作中的使用方式,基本api的使用还需要更深入的去钻研,多使用才会有提高.今天主要是探讨一下kafka的消息复制以及消息处理机制. 1. bro ...
- Netty学习(六)-LengthFieldBasedFrameDecoder解码器
在TCP协议中我们知道当我们在接收消息时候,我们如何判断我们一次读取到的包就是整包消息呢,特别是对于使用了长连接和使用了非阻塞I/O的程序.上节我们也说了上层应用协议为了对消息进行区分一般采用4种方式 ...
- Codeforces 868E Policeman and a Tree
题意简述 给你一颗有n个点的树,每条边有边权,有一个警察一开始在点S,他的速度是1,即通过一条长度为x的边要花x单位时间. 有m个罪犯,一开始第i个在点x[i],他们的速度无限快. 如果罪犯和警察到达 ...