当前位置: 首页 > 后端技术 > Node.js

ES6array数组整理:比ES5更推荐的使用方法和技巧

时间:2023-04-03 15:43:39 Node.js

原文链接:https://dsx2016.com/?p=692微信公众号:Master2016ECMAScriptECMAScript是一种按ECMA-262命名规范的脚本语言。尽管JavaScript和JScript与ECMAScript兼容,但它们包含ECMAScript以外的功能。下表按四个模块分类:ECMAScript1stEdition(ECMA-262)对应第一版及ES5之前的版本(仅本文)ECMAScript5.1(ECMA-262)对应ES5ECMAScript2015(6thEdition,ECMA-262))对应ES6ECMAScript最后对应ES7由于/ES8/ES9/ES10的长度,Array.prototype.map()缩写为map(),以此类推。ES1stES5ES6ESLasterArray.lengthArray.isArray()Array.from()includes()unshift()indexOf()Array.of()concat()lastIndexOf()findIndex()join()every()find()pop()some()fill()push()forEach()copyWithin()reverse()map()entries()shift()filter()flat()slice()reduce()flatMap()sort()reduceRight()includes()splice()keys()toLocaleString()values()toString()removeduplicatesfromarrayES6使用,有两种方式,需要创建一个Set数据结构来去除重复值letfruits=[`banana`,`orange`,`apple`,`pear`,`grape`,`apple`];第一种方式,使用Array.from()letdeduplicationFruits=Array.from(newSet(fruits))第二种方式,使用...扩展操作符(推荐)letdeduplicationFruits=[...newSet(fruits)]使用Array.prototype.indexOf()letarr=[1,2,NaN]if(arr.indexOf(1)!==-1){//...}来判断给定的值是否存在arrayES5//注意[NaN].indexOf(NaN)//-1ES6使用Array.prototype.includes()(推荐)letarr=[1,2,NaN]arr.includes(1)//true[NaN].includes(NaN)//true检测是否为数组ES5使用Array.isArray()(推荐),其他方法不再描述constarr=[];constobj={};Array.isArray(arr);//trueArray.isArray(obj);//false浅拷贝和深拷贝浅拷贝ES6使用。..Extensionoperator注意:这个方法是浅拷贝letarr1=[1,2,3,{a:123}];letarr2=[...arr1]arr2[0]=5//arr1[1,2,3,{a:123}]arr2[5,2,3,{a:123}];arr2[3].a=456//arr1[1,2,3,{a:456}]arr2[5,2,3,{a:456}];深拷贝使用JSON序列化,JSON.parse(JSON.stringify(arr))比较简单,可以满足一般场景。该方法不兼容复杂对象的属性,如set、get、Function等,只兼容JSON格式支持的数据类型。不能对正则表达式类型、函数类型等进行深拷贝,会直接丢失对应的值letarr1=[1,2,3,{a:123}]letarr2=JSON.parse(JSON.stringify(arr1))