type
status
date
slug
tags
category
icon
password

数组

常⽤的数组操作⽅法有哪些?

Array.shift()

  • 删除并返回第⼀个元素作⽤:从数组中删除第⼀个元素(即下标为0的元素),并返回该元素。 注意:1)删除元素之后,数组的⻓度-1。

Array.pop()

  • 删除并返回最后⼀个元素 作⽤:从数组中删除最后⼀个元素(即下标为length-1的元素),并返回该元素。 注意:1)删除元素之后,数组的⻓度-1。

Array.push(param1[,param2,…paramN])

  • 尾部添加元素 作⽤:在数组的尾部添加⼀个元素,并返回新数组的⻓度。 注意:1)它是直接修改该数组,⽽不是重新创建⼀个数组。

Array.unshift(newElement1[,newElement2,…newElementN])

  • 头部添加元素 作⽤:在数组的头部添加⼀个或多个元素,并返回新数组的⻓度。 注意:1)它是直接修改该数组,⽽不是重新创建⼀个数组

Array.join([separator])

  • 转换成字符串 作⽤:把数组的所有元素放⼊到⼀个字符串中。 注意:1)参数separator表示字符串中元素的分隔符,可以为空,默认为半⻆逗号。

Array.reverse()

  • 反转数组 作⽤:把数组的所有元素顺序反转。 注意:1)该⽅法会直接修改数组,⽽不会创建新的
    • 数组

数组如何进⾏降维(扁平化)

  • 利⽤Array.some⽅法判断数组中是否还存在数组,es6展开运算符连接数组
  • let arr = [1,2,[3,4]] while (arr.some(item => Array.isArray(item))) { arr = [].concat(...arr); }
  • 使⽤数组的concat⽅法
  • let arr = [1,2,[3,4]] let result = [] result = Array.prototype.concat.apply([], arr)
  • es6中的flat函数也可以实现数组的扁平化
  • let arr = [1,2,['a','b',['中','⽂',[1,2,3,[11,21,31]]]],3]; let result = arr.flat( Infinity )

数组去重,能⽤⼏种⽅法实现?

  • 利⽤ES6 Set去重(ES6中最常⽤)
  • 利⽤for嵌套for,然后splice去重(ES5中最常⽤)
  • 利⽤indexOf去重
  • 利⽤sort去重
  • 利⽤includes
  • 利⽤fifilter
  • 利⽤递归去重

数组中的forEach和map的区别?

forEach() 和 map() 两个⽅法都是ECMA5中Array引进的新⽅法,都是⽤来遍历数组中的每⼀项。

它们之间的区别:

  • map速度⽐forEach快
  • map会返回⼀个新数组,不对原数组产⽣影响,foreach不会产⽣新数组,forEach返回undefifined
  • map因为返回数组所以可以链式操作,forEach不能
  • map⾥可以⽤return(return的是什么,相当于把数组中的这⼀项变为什么(并不影响原来的数 组,只是相当于把原数组克隆⼀份,把克隆的这⼀份的数组中的对应项改变了) 。
  • forEach⾥⽤return不起作⽤,forEach不能⽤break,会直接报错。

for in和for of的区别?

在JavaScript中遍历数组通常是使⽤for…i循环,在ES5具有遍历数组功能的还有forEach、map、fifilter、
some、every、reduce、reduceRight等。for…in和for…of是两种增强型循环,for…in是ES5标准,在
ES6中新增了for…of的循环⽅式。
  • for…in :遍历以任意顺序迭代⼀个对象的除Symbol以外的可枚举属性,包括继承的可枚举属性
  • for…of:遍历在可迭代对象,包括 Array , Map , Set , String , TypedArray ,arguments 对象等等
  • 它们的区别 :
    • for…in可以遍历对象和数组,for…of不能遍历对象
    • for…in 循环不仅遍历对象的键名,还会遍历⼿动添加的其它键,甚⾄包括原型链上的键
    • for…in遍历的索引为字符串类型
    • for..of适⽤遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合,但是不能遍历对象
    • for…of与forEach()不同的是,它可以正确响应break、continue和return语句具有迭代器对象才可以使⽤for…of
作用域事件流
Loading...