JS数组

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')
  • 另外,MapSet 数据结构有一个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.everysome方法

  • 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.maxapply取数组最大值:

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需要一个二维数组,或者直接初始化一个空MapMap具有以下方法:
    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:

  • SetMap类似,也是一组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结构类似,也是用于生成键值对的集合。WeakMapMap的区别有两点:

  • WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
  • WeakMap的键名所指向的对象,不计入垃圾回收机制
    • 基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。一个典型应用场景是,在网页的DOM 元素上添加数据,就可以使用WeakMap结构。当该 DOM 元素被清除,其所对应的WeakMap记录就会自动被移除。另一个用处是部署私有属性
    • 总之,WeakMap的专用场合就是,它的键所对应的对象,可能会在将来消失。WeakMap结构有助于防止内存泄漏
    • WeakMap 弱引用的只是键名,而不是键值。键值依然是正常引用

12. Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array等都是类型化数组 view,按照原生的 byte数排序。dataViewAPI:DataView

你可能感兴趣的:(JS数组)