JavaScript是一门非常灵活的动态语言,涵盖的内容也挺多,《JavaScript高级程序设计》看了也有两遍,但是在实际开发的时候,还是有很多东西记不清,然后还得去翻书,特别是一些Array、String对象之类的操作方法,经常搞混,所以趁着这次再从头学一次JavaScript的机会,把这些操作方法或者技巧都记下来,一来加深印象,二来方便查阅。

现在的JavaScript的正式版本是ES6(ES2015),所以暂时不写ES7的,浏览器基于Google Chrome 56.0.2924.87,在写这篇文章的时候,这是最新版的Chrome,对ES6的语法支持已经很好了。

1.方法

首先打开控制台, 看看Array原型上都有些什么,也就是我们可以直接用来操作数组的方法。

基本上我们常用的方法都在这里面了,下面把他们分类记录下:

1>转换方法

toString()

调用toString()方法,会返回一个将数组中所有元素通过逗号拼接成的字符串,不会改变原数组。

例:

var arr = ['tom', 'alice'];

var arr2 = arr.toString();

console.log(arr); // ["tom", "alice"]

console.log(arr2); // "tom,alice"

toLocalString()

调用toLocalString()方法,数组中的元素将会使用各自的toLocalString()方法,不同类型的元素,其toLocalString()和toString()两个方法返回值是有区别的。

例:

var number = 1337;
var date = new Date();
var myArr = [number, date, "foo"]; var str = myArr.toLocaleString();
console.log(str); // "1,337,2017/3/5 下午4:18:36,foo" var str2 = myArr.toString();
console.log(str2); // "1337,Sun Mar 05 2017 16:18:36 GMT+0800 (中国标准时间),foo"

具体的差别大家可以上MDN上查阅,如果后面有机会,我也会写出来。

2>栈方法

画了一个图,比较直观

这四个方法大家有时候容易搞混,特别是对于其返回值,这里有一个比较邪恶的记忆方法,进去的时候,一下就好多亿,分不清谁是谁,所以返回的都是数字,也就是数组长度。

3>重排序方法

reverse()

reverse()方法就是把数组里的元素前后顺序给颠倒了一下,会改变原来数组。

例:

var arr = [1,2,6,7,4,5];

console.log(arr); // [5, 4, 7, 6, 2, 1]

sort()

sort()方法算是一个快速排序的方法,接受一个函数作为参数,来指定排序规则,改变原数组。

使用语法 arr.sort(compareFunction) ,例:

var numbers = [4, 2, 5, 1, 3];

numbers.sort(function(a, b) {
return a - b;
}); console.log(numbers); // [1, 2, 3, 4, 5]

4>迭代方法

every()

接受一个函数作为参数,对数组中的每一项运行此函数,如果数组中的每一项都返回true,则最终返回true,不改变原数组。

语法 arr.every(callback(item, index, array)) ,例:

var arr = [12, 15, 6, 23, 56, 99];

var result = arr.every(function(item, index, array) {
return (item > 10);
}) console.log(result); // false

some()

接受一个函数作为参数,对数组中的每一项运行此函数,如果数组中的有任意一项返回true,则最终返回true,不改变原数组。

与every()的关系相当于与和或的关系。

filter()

接受一个函数作为参数,对数组中的每一项运行此函数,返回一个由原数组中通过验证的项所组成的新数组,不改变原数组。

语法 var new_arrary = arr.filter(callback(item, index, array)) ,例:

var arr = [12, 15, 6, 23, 56, 99, 1, 3];

var result = arr.filter(function(item, index, array) {
return (item > 10);
}) console.log(result); // [12, 15, 23, 56, 99]

map()

接受一个函数作为参数,对数组中的每一项运行此函数,经过此函数处理后,返回一个由处理结果所组成的新数组,不改变原数组。

语法 var new_arrary = arr.map(callback(item, index, array)) ,例:

var numbers = [1, 5, 10, 15];

var roots = numbers.map(function(x) {
return x * 2;
}); console.log(roots); // [2, 10, 20, 30]

forEach()

遍历数组中的每一个元素,和for循环差不多。

语法 var new_arrary = arr.forEach(callback(item, index, array)) 。

entries()

返回一个新的Array Iterator对象,该对象包含数组中每个索引的键-值对。

这个是ES6中的方法,大家用的可能很少,通常需要配合.next()方法使用,例:

var arr = ["a", "b", "c"];
var iterator = arr.entries(); // undefined console.log(iterator); // Array Iterator {} console.log(iterator.next().value); // [0, "a"] console.log(iterator.next().value); // [1, "b"] console.log(iterator.next().value); // [2, "c"]

也可以配合for...of循环使用,例:

var arr = ["a", "b", "c"];
var iterator = arr.entries();
// undefined for (let e of iterator) {
console.log(e);
} // [0, "a"]
// [1, "b"]
// [2, "c"]

5>修改方法

slice()

将数组的一部分浅拷贝, 返回到从开始到结束(不包括结束)选择的新数组对象,不改变原数组。

语法 arr.slice(begin, end) ,需要注意的是,这里的[begin, end),是一个左闭右开区间,例:

var arr = [12, 15, 6, 23, 56, 99];

var arr2 = arr.slice(0,-1);

console.log(arr); // [12, 15, 6, 23, 56, 99]

console.log(arr2); // [12, 15, 6, 23, 56]

splice()

这个方法比较强大,既可以删除,又可以插入和替换,会修改原始数组。

语法 array.splice(start, deleteCount, item1, item2, ...) ,例:

var myFish = ["angel", "clown", "mandarin", "sturgeon"];

myFish.splice(2, 0, "drum"); 

console.log(myFish); // ["angel", "clown", "drum", "mandarin", "sturgeon"] 

concat()

用于合并两个或多个数组,返回一个新数组,不改变原数组。

语法 var new_array = old_array.concat(old_array2)

需要注意的是:concat()和slice()一样,都是属于嵌拷贝,如果原数组中有对象引用(非对象直接量),当那个对象被修改时,原数组和新生成的数组也同时会被修改。

join()

可以将数组中的所有元素以指定的分隔符连接成一个字符串,对类数组对象也有效。

语法 str = arr.join(separator)

includes()

用来判断当前数组是否包含某指定的值,如果是,则返回 true,否则返回 false

语法 arr.includes(searchElement, fromIndex) ,例:

 var a = [1, 2, 3];
a.includes(2); // true
a.includes(4); // false

6>位置方法

indexOf()

返回给定元素在数组中的第一个位置,可以指定开始查找的位置,如果不存在,则返回-1。

语法 arr.indexOf(searchElement[, fromIndex = 0])

lastIndexOf()

用法与indexOf()一样,不过是从后面开始找。

7>归并方法

reduce()

对累加器和数组的每个值 (从左到右)应用一个函数,以将其减少为单个值。

也是一个挺强大的方法,不仅可以做累加哦!

语法 arr.reduce(callback,[initialValue]) ,例:

累加:

var sum = [0, 1, 2, 3].reduce(function(a, b) {
return a + b;
}, 0); console.log(sum); //

数组扁平化:

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
return a.concat(b);
}, []); console.log(flattened ); // [0, 1, 2, 3, 4, 5]

JavaScript之Array的更多相关文章

  1. JavaScript之Array常用函数汇总

    [20141121]JavaScript之Array常用功能汇总 *:first-child { margin-top: 0 !important; } body>*:last-child { ...

  2. JavaScript原生Array常用方法

    JavaScript原生Array常用方法 在入门Vue时, 列表渲染一节中提到数组的变异方法, 其中包括push(), pop(), shift(), unshift(), splice(), so ...

  3. Javascript中Array(数组)对象常用的几个方法

    Javascript中Array数组的几个常用方法 pop()  --获取数组中末尾的元素 shift() --获取数组中首位元素 push() --在数组中末尾增加元素 slice()  --按照下 ...

  4. javascript数组Array强大的splice()方法

    javascript的Array数组提供了强大的splice()方法, 用于对数组元素的增删改 1.删除-用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数) 删除: ...

  5. Javascript数组Array的forEach方法

    Javascript数组Array的forEach扩展方法 forEach是最常用到的数组扩展方法之一,相当于参数化循环数组,它简单的在数组的每一个元素上应用传入的函数,这也意味着只有存在的元素会被访 ...

  6. Javascript 中 Array的 sort()和 compare()方法

    Javascript 中 Array的 sort()方法其实是把要排序的内容转化为string(调用 toString()), 然后按照字符串的第一位 ascii 码先后顺序进行比较,不是数字. 我们 ...

  7. JavaScript 中Array数组的几个内置函数

    本文章内容均参考<JavaScript高级程序设计第三版> 今天在看JavaScript书籍的时候,看到之前没有了解过的JavaScript中Array的几个内置函数对象,为了之后再开发工 ...

  8. JavaScript中Array方法总览

    title: JavaScript中Array方法总览 toc: true date: 2018-10-13 12:48:14 push(x) 将x添加到数组最后,可添加多个值,返回数组长度.改变原数 ...

  9. JavaScript中Array(数组) 对象

    JavaScript中Array 对象 JavaScript中创建数组有两种方式 (一)使用直接量表示法: var arr4 = []; //创建一个空数组var arr5 = [20]; // 创建 ...

  10. javascript change array length methods

    javascript change array length methods Array 改变数组长度的方法 push, pop shift, unshift, splice, fill, 不改变数组 ...

随机推荐

  1. 【JS深入学习】——事件代理/事件委托

    事件代理/事件委托(event delegation) 需求一:当一个div内部有多个事件发生,给每个元素逐个添加事件十分麻烦... 需求二:在项目中我们常常需要动态的添加元素,不可避免的需要为那些未 ...

  2. Java内存模型Cookbook

    前言 指令重排 内存屏障 多处理器 指南 前言 这是一篇用于说明在JSR-133中制定的新Java内存模型(JMM)的非官方指南. 这篇指南提供了在最简单的背景下各种规则存在的原因,而不是这些规则在指 ...

  3. dataTable 参数说明

    下面是一些常用的参数列表,比较常用或者有价值的标示为绿色. 功能参数(Features) 参数名 说明 参考值 默认值 autoWidth 定义是否由控件自动控制列宽 Boolean true def ...

  4. leetcode-908-最小差值 I

    题目描述: 给定一个整数数组 A,对于每个整数 A[i],我们可以选择任意 x 满足 -K <= x <= K,并将 x 加到 A[i] 中. 在此过程之后,我们得到一些数组 B. 返回  ...

  5. oauth2.0实现sso单点登录的方式和相关代码

    SSO介绍 什么是SSO 百科:SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...

  6. 【转】Hadoop vs Spark性能对比

    原文地址:http://www.cnblogs.com/jerrylead/archive/2012/08/13/2636149.html 基于Spark-0.4和Hadoop-0.20.2 1. K ...

  7. 《垃圾回收的算法与实现》——GC标记-清除算法

    基本算法 标记-清除算法由 ==标记阶段== 和 ==清除阶段== 构成. 标记即将所有活动的对象打上标记. 清除即将那些没有标记的对象进行回收. 标记与清除 遍历GC root引用,递归标记(设置对 ...

  8. docker 创建tomcat镜像

    Dockerfile ############################################ # version : wenbronk/jdkiu121/tomcat8 # desc ...

  9. 使用DAO模式开发宠物管理系统---hellokitty

    宠物有狗和企鹅. 狗的属性有:编号.名称.亲密值.健康值.品种.所属主人编号. 企鹅的属性有:编号.名称.亲密值.健康值.性别.所属主人编号. 该系统中主人可以领养宠物,主人的属性有:编号.用户名.密 ...

  10. (转) Java我的高效编程之环境搭建

    前言:刚毕业, 工作之余写博客有利于提高技术,更是能帮助人,接下来会认认真真写好每一篇博客.希望大家多多支持.废话不多说,马上开始.这是一篇环境搭建的博客. jdk+eclipse+svn+maven ...