步遥——数组的扩展

数组的扩展

rest参数:...变量名 ;add(...values) //函数的rest参数,用于获取函数的多余参数,变量values是一个数组,该变量将多余的参数放入数组中。

扩展运算符:... ;arr.push(...items) // 将一个数组转为用逗号分隔的参数序列。主要用于函数调用

用处:复制数组

const a1 = [1,2]

const a2 = a1 ;//指针复制,不是内容复制,属于浅克隆

深克隆方法:

const a2 = a1.concat();//复制内容

const a2 = [...a1];//复制内容

合并数组

[...a1,...a2,...a3] //浅拷贝

解构赋值

const [first ,...rest] = [1,2,3,4,5];

操作字符串

将字符串转为数组,计算4个字节的unicode字符的长度和反转

[...'hello']//['h','e','l','l','o']

将所有定义了Iterator接口的对象转为数组

例如类数组:

const param = [...arguments]

function test(){

const param = [...arguments]

console.log('param',param )

}

test(2,3) //'param' [2, 3]

Map和Set结构,Generator函数

以上都有Iterator接口,所以可以使用扩展运算符转为数组

数组新增的静态方法1:Array.from

该方法可以将类似数组,具有Iterator接口的数据,或者是没有Iterator接口,但是具有length属性的对象转换为数组,就是扩展运算符不能转换的数据类型,Array.from都可以转换

Array.from('hello'),//['h','e','l','l','o']

第二个参数传一个对转为数组后的每一项进行操作的方法,类似map方法

Array.from('hello',(x,i)=>i+x)

如果没有Array.from方法,使用数组的slice方法进行改造:

[].slice.call(obj)

第三个参数,用来绑定this

静态方法2:Array.of,用于将一组值转为数组,参数就是组成数组的成员

Array构造数组时,参数个数为1时参数表示的时数组的长度,多余1个时,参数才成为数组的成员

Array.of解决了上面的不同值问题,所以可以使用Array.of替代new Array(),它总会返回参数值组成的数组,如果没有参数,就返回一个空数组

实例方法1:copyWithin

语法:将start开始读取到end前一位结束的数据替换target开始的数据,改变原数组

Array.prototype.copyWithin(target, start = 0, end = this.length)

[1,2,3,4,5].copyWithin(2,3) //[1, 2, 4, 5, 5]

实例方法:find ,findIndex

find找出第一个符合条件的数组成员,参数时一个回调函数,找出第一个返回值为true的成员,然后返回该成员

findIndex找出第一个符合条件的数组成员的位置,否不符合则返回-1

均支持第二个参数绑定this ,并且可以发现NaN,弥补indexOf的不足

function f(v){

  return v > this.age;

}

let person = {name: 'John', age: 20};

[10, 12, 26, 15].find(f, person);

实例方法:fill

使用一个值(参数),填充数组中的每一项

['a','b'].fill(4)//[4,4]

new Array(5).fill(3) //初始化数组很方便

接受第二,第三个参数,指定填充的起始位置和结束位置之前

['a', 'b', 'c'].fill(7, 1, 2) //['a',7,'c']

如果填充的类型时对象,则被赋值的时同一个内存地址的对象,不是深拷贝对象

let arr = new Array(5).fill({a:1})

arr[0] === arr[1] // true 表明是同一个对象地址

实例方法:entries,keys,values

keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历

可以使用for...of循环进行遍历

实例方法:includes

类似字符串的includes方法

Set和Map数据结构判断是否含有某项使用has,

Map的has用来查找键名

Set的has用来查找键值

实力方法:flat,flatMap 均不改变原数组

拉平数组

flat默认只会拉平一层,如果给参数是一个整数N,则会拉平N层

如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数

如果原数组有空位,flat()方法会跳过空位

[1,2,[3,5,[6]]].flat() //[1, 2, 3, 5, [6] ]

[1,2,[3,5,[6]]].flat(2)  // [1, 2, 3, 5, 6]

flatMap,对原数组的每个成员执行一个函数,然后对返回值组成的数组执行flat,不改变原数组

只能展开一层数组

第一个参数是遍历函数,第二个参数用来绑定this

es5对数组空位的处理:

*   forEach(), filter(), reduce(), every() 和some()都会跳过空位。

*   map()会跳过空位,但会保留这个值

*   join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串

es6对数组的空位处理:转为undefined

处理数组排序的稳定性:

排序稳定性(stable sorting)是排序算法的重要属性,指的是排序关键字相同的项目,排序前后的顺序不变

ES2019 明确规定,Array.prototype.sort()的默认排序算法必须稳定

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容