1. 创建数组:
第一种是使用 Array 构造函数:
var arr1 = new Array(); //创建一个空数组 var arr2 = new Array(20); // 创建一个包含20项的数组 var arr3 = new Array("lily","lucy","Tom"); // 创建一个包含3个字符串的数组
第二种基本方式是使用数组字面量表示法:
var arr4 = []; //创建一个空数组 var arr5 = [20]; // 创建一个包含1项的数组 var arr6 = ["lily","lucy","Tom"]; // 创建一个包含3个字符串的数组
constructor
length
prototype
join()
push()和pop()
shift() 和 unshift()
sort()
reverse()
concat()
slice()
splice()
indexOf()和 lastIndexOf() (ES5新增)
forEach() (ES5新增)
map() (ES5新增) //遍历每一个元素,不修改原数组;
filter() (ES5新增) //过滤每一个元素,不修改原数组;
every() (ES5新增)
some() (ES5新增)
reduce()和 reduceRight() (ES5新增)
find() (ES6新增)
findIndex( ES6 add)
includes() (ES6 add)
keys() (ES6 add)
values() (ES6 add)
entries() (ES6 add)
fill() (ES6 add)
of() (ES6 add)
copyWithin() (ES6 add)
from() (ES6 add)
展开运算符 (ES6 add)
JSON.parse('[1,2,3]')[0]===1
eval("("+'[1,2,3]'+")")[0]===1 // 应避免使用eval
JSON.stringify([])==="[ ]"
let arrObj = [1,2,3,4]
let arrStr = arrObj.toString() // "1,2,3,4" 数组转成了字符串
Array.of(arrStr) //[1,2,3,4] 字符串转成了数组
new Array(arrStr) //[1,2,3,4] 字符串转成了数组
Array.from可以把带有lenght属性类似数组的对象转换为数组,也可以把字符串等可以遍历的对象转换为数组,它接收2个参数,转换对象与回调函数
Array.of()方法永远返回一个数组,参数不分类型,只分数量,数量为0返回空数组。
Array.from(divs)//返回div元素数组
Array.from('wbiokr')//["w", "b", "i", "o", "k", "r"]
Array.from([1,2,3],function(x){ return x+1})//[2, 3, 4],第二个参数为回调函数
let arr = [] arr.unshift(1) //数组开头添加,返回被添加的元素 arr.push(1) //数组结尾添加,返回被添加的元素 arr[arr.length] 和 push的方法一样 arr[index] //在指定位置替换和添加 arr.splice(index,howmany,item1,.....,itemX) // 添加、替换、删除数组成员的方法 index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。 item1, ..., itemX 可选。向数组添加的新项目。
6. 数组删除元素
arrObj.pop(); // 移除最前一个元素并返回该元素值,数组中元素自动前移 arrObj.shift(); arrObj.splice()
用delete arr[0] 删除数组中的元素,其数组长度仍然不变。只是赋值为undefined;
arr.length-=1 //skill 删除数组最后一个元素;
7.截取和合并
以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素
arrObj.slice(start, [end]);
将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组
arrObj.concat([item1[, item2[, . . . [,itemN]]]]);
8.数组深拷贝
返回数组的拷贝数组,注意是一个新的数组,不是指向
arrObj.slice(0);
返回数组的拷贝数组,注意是一个新的数组,不是指向
arrObj.concat();
因为数组是引用数据类型,直接赋值并没有达到真正实现拷贝,地址引用,我们需要的是深拷贝。
9. 数组排序
对数组元素排序,返回数组地址
arrObj.sort();
arrObj.reverse();
arrObj.join()
11. 判断数组:
Array.isArray([]);
[] instanceof Array;
({}).toString.apply([])==='[ object Array ]' ;
[].constructor===Array; //不能判断从数组继承而来的对象;
let arr=[1,2,3,4,5]; arr.includes(2);// 结果true,返回布尔值. (判断元素是否在数组中)
12. 数组推导(array comprehensions)
数组推导就是利用for...of循环基于现有的数组生成新数组。例:
[for (i of [1, 2, 3]) i * i] // [1, 4, 9]
数组推导允许使用if语句:
// 单个if语句 [for (i of [1, 2, 3]) if (i < 3) i] // [1, 2] //多重if语句 [for (i of [1, 2, 3]) if (i < 3) if (i > 1) i] // [2]
需要注意的是for...of总是写在最前面。
数组推导也允许使用多重for..of循环:
[for (i of [1, 2, 3]) for (j of [4, 5, 6]) i * j] // [4, 5, 6, 8, 10, 12, 12, 15, 18]
数组推导中还可以包含数组推导:
[for (i of [1, 2, 3]) [for (j of [4, 5, 6]) i * j]] // [[4, 5, 6], [8, 10, 12], [12, 15, 18]]
13. Null 传导运算符
编程实务中,如果读取对象内部的某个属性,往往需要判断一下该对象是否存在。比如,要读取message.body.user.firstName
,安全的写法是写成下面这样。
const firstName = (message && message.body && message.body.user && message.body.user.firstName) || 'default';
这样的层层判断非常麻烦,因此现在有一个提案,引入了“Null 传导运算符”(null propagation operator)?.
,简化上面的写法。
const firstName = message?.body?.user?.firstName || 'default';
ES6---数组array新增方法 https://blog.csdn.net/wbiokr/article/details/65939582