1.includes()
-
includes
方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回true
,否则返回false
arr.includes(valueToFind[, fromIndex]) 第一个参数是需要查找的元素值 第二个参数fromIndex 表示从fromIndex 索引处开始查找 valueToFind。如果为负值,则按升序从 array.length + fromIndex 的索引开始搜 (即使从末尾开始往前跳 fromIndex 的绝对值个索引,然后往后搜寻)。默认为 0 //如果 fromIndex 大于等于数组的长度,则会返回 false,且该数组不会被搜索。 //如果 fromIndex 为负值,计算出的索引将作为开始搜索searchElement的位置。如果计算出的索引小于 0,则整个数组都会被搜索
-
includes()
方法有意设计为通用方法。它不要求this
值是数组对象,所以它可以被用于其他类型的对象 (比如类数组对象)。比如在函数的 arguments 对象上调用的 includes() 方法:[].includes.call(arguments, 'xx')
- 另外,
Map
和Set
数据结构有一个has
方法,需要注意与includes
区分 -
Map
结构的has
方法,是用来查找键名的,比如Map.prototype.has(key)
、WeakMap.prototype.has(key)
、Reflect.has(target, propertyKey)
-
Set
结构的has
方法,是用来查找值的,比如Set.prototype.has(value)
、WeakSet.prototype.has(value)
2.js数组的filter
方法
- 返回值:一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组
3.every
和some
方法
-
every()
与some()
方法都是JS中数组的迭代方法。 -
every()
测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。 -
some()
测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean
类型的值。注意:如果用一个空数组进行测试,在任何情况下它返回的都是false
4.reverse
方法
-
reverse()
方法用于颠倒数组中元素的顺序 -
该方法会改变原数组,返回值是颠倒后的数组
引申:字符串逆序:
str.split('').reverse().join('')
charAt
-
localCompare
:方法返回一个数字来指示一个参考字符串是否在排序顺序前面或之后或与给定字符串相同。新的 locales 、options参数能让应用程序定制函数的行为即指定用来排序的语言。 locales 和 options 参数是依赖于具体实现的 - 自己实现一个堆栈
5.find方法
-
find()
方法为数组中的每个元素都调用一次函数执行,当数组中的元素在测试条件时返回true
时,find()
返回符合条件的元素,之后的值不会再调用执行函数。如果没有符合条件的元素返回undefined
-
find()
对于空数组,函数是不会执行的 -
find()
并没有改变数组的原始值
6.findIndex方法
-
findIndex()
方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置 -
findIndex()
方法为数组中的每个元素都调用一次函数执行 - 当数组中的元素在测试条件时返回
true
时,findIndex()
返回符合条件的元素的索引位置,之后的值不会再调用执行函数
如果没有符合条件的元素返回 -1 -
findIndex()
对于空数组,函数是不会执行的 -
findIndex()
并没有改变数组的原始值
7. reduce方法
reduce
接受两个参数,分别是回调函数和初始值。回调函数接受四个参数(累计值、当前元素、当前索引、原数组),可以reduce
来实现map
函数
8. Math.max
用apply
取数组最大值:
Math.max.apply(null,arr)
9.怎么给数组中插入一个值
push
unshift
splice
10.怎么清空一个数组:
splice(index,howmany,element1....elements)
arr.length=0
arr=[]
11.Set、map、weakSet、weakMap用法
Map:
-
Map
是一组键值对的结构,具有极快的查找速度 - 初始化
Map
需要一个二维数组,或者直接初始化一个空Map
。Map
具有以下方法:var m = new Map(); // 空Map m.set('Adam', 67); // 添加新的key-value m.set('Bob', 59); m.has('Adam'); // 是否存在key 'Adam': true m.get('Adam'); // 67 m.delete('Adam'); // 删除key 'Adam' m.get('Adam'); // undefined m.clear() //清除所有成员,没有返回值
- 由于一个
key
只能对应一个value
,所以,多次对一个key
放入value
,后面的值会把前面的值冲掉
Set:
-
Set
和Map
类似,也是一组key
的集合,但不存储value
。由于key
不能重复,所以,在Set
中,没有重复的key
。 - 要创建一个
Set
,需要提供一个Array
作为输入,或者直接创建一个空Set
var s1 = new Set(); // 空Set var s2 = new Set([1, 2, 3]); // 含1, 2, 3
-
add(value
):添加某个值,返回 Set 结构本身。可以重复添加,但不会有效果 -
delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。 -
has(value)
:返回一个布尔值,表示该值是否为Set的成员。 -
clear()
:清除所有成员,没有返回值。
Set
结构的实例有四个遍历方法,可以用于遍历成员。需要特别指出的是,Set的遍 历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用
-
keys()
:返回键名的遍历器 -
values()
:返回键值的遍历器 -
entries()
:返回键值对的遍历器 -
forEach()
:使用回调函数遍历每个成员
如果想在遍历操作中,同步改变原来的 Set结构,目前没有直接的方法,但有两种变通方法。一种是利用原 Set
结构映射出一个新的结构,然后赋值给原来的 Set
结构;另一种是利用Array.from
方法。
WeakSet:
WeakSet
结构与Set
类似,也是不重复的值的集合。但是,它与Set
有两个区别:
-
WeakSet
的成员只能是对象,而不能是其他类型的值。 -
WeakSet
中的对象都是弱引用,即垃圾回收机制不考虑WeakSet
对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet
之中。因此,WeakSet
不可遍历
WeakMap:
WeakMap
结构与Map
结构类似,也是用于生成键值对的集合。WeakMap
与Map
的区别有两点:
-
WeakMap
只接受对象作为键名(null
除外),不接受其他类型的值作为键名。 -
WeakMap
的键名所指向的对象,不计入垃圾回收机制- 基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用
WeakMap
。一个典型应用场景是,在网页的DOM
元素上添加数据,就可以使用WeakMap
结构。当该DOM
元素被清除,其所对应的WeakMap
记录就会自动被移除。另一个用处是部署私有属性 - 总之,
WeakMap
的专用场合就是,它的键所对应的对象,可能会在将来消失。WeakMap
结构有助于防止内存泄漏 -
WeakMap
弱引用的只是键名,而不是键值。键值依然是正常引用
- 基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用
网友评论