JavaScript ES6 数组属性、方法及其扩展

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个字符串的数组
2. 数组属性:
constructor
length
prototype
3. 数组的方法:
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)
 
4. 数组、字符串转换,类数组转换
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],第二个参数为回调函数
5. 数组添加元素
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(); 
10.合并成字符
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
原文地址:https://www.cnblogs.com/wtaog/p/9094641.html