总结Array的方法

Array构造函数的方法(这些方法只能被Array构造函数调用,不被数组实例继承)

Array.from()
作用:将伪数组(NodeList)或可迭代对象(Set)转换为真正的数组
参数:伪数组或可迭代对象,mapFn回调函数(可选),thisArg对象(可选)
返回值:数组实例
目的:让伪数组或可迭代对象能使用数组的方法

伪数组对象(拥有一个 length 属性和若干索引属性的任意对象)
可迭代对象(可以获取对象中的元素,如 Map和 Set 等)
Array.from()还提供了一个可选参数mapFn,其实就是在生成的新数组后调用map方法,mapFn就是map方法的回调函数。thisArg是回调函数绑定的对象

Array.from('foo');      //ES6的方法
[].slice.call("foo");   //ES5的方法
// ["f", "o", "o"]

Array.isArray()
作用:判断传递的值是否为数组
参数:要检测的值
返回值:如果对象是 Array ,则返回true,否则为false
instanceof也是检测对象类型的,Array是常用的数据结构,所以为它额外添加了一个检测方法。优先使用Array.isArray()

// 兼容没有Array.isArray方法的浏览器
if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

Array.of()
作用:创建数组实例
参数:item1, item2, item3 ….
返回值:以参数为数组元素的数组

var arr=Array.of([1,2], {}, 1);
// [[1,2], {}, 1]

Array.of()和new Array的区别是参数作用更清晰,new Array的参数的数目不同,作用也不同。一个参数时,参数代表的是数组长度,大于一个参数时,参数才是数组元素

// 兼容
if (!Array.of) {
  Array.of = function() {
    return Array.prototype.slice.call(arguments);
  };
}




Array.prototype的方法(可被数组实例继承)

下面的这些方法会改变调用它们的对象自身的值

Array.prototype.copyWithin()
作用:复制指定位置的值到指定的位置(会覆盖原来的值),ES6的方法
参数:目标位置,要复制值的起始索引(可选,默认为0),结束索引(可选,默认为数组的length-1)
返回值:改变后的数组

var arr=[1,2,3,4];
var arr2= arr.copyWithin(0,1,3);  //复制从索引1开始到索引3之前的元素,并从索引0开始覆盖
console.log(arr);   // [2, 3, 3, 4]
console.log(arr2);  //[2, 3, 3, 4]

小提示:在数组的其它方法中,一般涉及起始位置和结束位置,都是只包含起始位置,不包括结束位置。



Array.prototype.fill()
作用:填充数组指定区间的值
参数:填充进去的值,起始索引(可选,默认为0),结束索引(可选,默认为数组的length)
返回值:修改后的数组
用途:可以用来初始化数组元素的值


下面的这些方法会改变调用它们的对象自身的值:
Array.prototype.copyWithin()     ES6
在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值。

Array.prototype.fill()     ES6
将数组中指定区间的所有元素的值,都替换成某个固定的值。

Array.prototype.pop()
删除数组的最后一个元素,并返回这个元素。

Array.prototype.push()
在数组的末尾增加一个或多个元素,并返回数组的新长度。

Array.prototype.reverse()
颠倒数组中元素的排列顺序,即原先的第一个变为最后一个,原先的最后一个变为第一个。

Array.prototype.shift()
删除数组的第一个元素,并返回这个元素。

Array.prototype.sort()
对数组元素进行排序,并返回当前数组。

Array.prototype.splice()
在任意的位置给数组添加或删除任意个元素。

Array.prototype.unshift()
在数组的开头增加一个或多个元素,并返回数组的新长度。



下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值。
Array.prototype.concat()
返回一个由当前数组和其它若干个数组或者若干个非数组值组合而成的新数组。

Array.prototype.includes()     ES6
判断当前数组是否包含某指定的值,如果是返回 true,否则返回 false。

Array.prototype.join()
连接所有数组元素组成一个字符串。

Array.prototype.slice()
抽取当前数组中的一段元素组合成一个新数组。

Array.prototype.toString()
返回一个由所有数组元素组合而成的字符串。遮蔽了原型链上的 Object.prototype.toString() 方法。

Array.prototype.toLocaleString()
返回一个由所有数组元素组合而成的本地化后的字符串。遮蔽了原型链上的 Object.prototype.toLocaleString() 方法。

Array.prototype.indexOf()
返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。

Array.prototype.lastIndexOf()
返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。

indexOf() includes()和find()方法的区别
indexOf寻找一个元素的位置,找到就返回其索引,否则返回-1;includes()只是判断数组中是否有某个元素,有则返回true,否则返回false。下面还有一个find方法,它和indexOf有些类似,find方法是寻找符合条件的元素的值,它会为每个元素调用回调函数,第一个使回调函数返回true的元素将会被find返回


下面的众多遍历方法中,有很多方法都需要指定一个回调函数作为参数。在回调函数执行之前,数组的长度会被缓存在某个地方,所以,如果你在回调函数中为当前数组添加了新的元素,那么那些新添加的元素是不会被遍历到的。此外,如果在回调函数中对当前数组进行了其它修改,比如改变某个元素的值或者删掉某个元素,那么随后的遍历操作可能会受到未预期的影响。总之,不要尝试在遍历过程中对原数组进行任何修改,虽然规范对这样的操作进行了详细的定义,但为了可读性和可维护性,请不要这样做。

Array.prototype.forEach()   ES5
为数组中的每个元素执行一次回调函数。

Array.prototype.entries()   ES6
返回一个数组迭代器对象,该迭代器会包含所有数组元素的键值对。

Array.prototype.every()
如果数组中的每个元素都满足测试函数,则返回 true,否则返回 false。

Array.prototype.some()
如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。

Array.prototype.filter()
将所有在过滤函数中返回 true 的数组元素放进一个新数组中并返回。

Array.prototype.find()   ES6
找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回 undefined。

Array.prototype.findIndex()   ES6
找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回 -1。

Array.prototype.keys()   ES6
返回一个数组迭代器对象,该迭代器会包含所有数组元素的键。

Array.prototype.map()
返回一个由回调函数的返回值组成的新数组。

Array.prototype.reduce()
从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。

Array.prototype.reduceRight()
从右到左为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。

Array.prototype.values()   ES6
返回一个数组迭代器对象,该迭代器会包含所有数组元素的值。

Array.prototype@@iterator   ES6
和上面的 values() 方法是同一个函数。

every()和some()的区别
every的作用是判断数组的所有元素是否符合某个条件(在回调函数中定义这个条件,满足条件就返回true),只有所有回调函数都返回true,every才返回true
some的作用是判断数组中是否有符合条件的元素,只要有满足条件的元素就返回true

filter()很find()的区别
filter返回的是一个数组,这个数组是所有满足条件的元素。
find返回的是一个值,这个值是第一个满足条件的数组元素,若没有满足条件的元素就返回undefined

findIndex()和indexOf的区别
它们都是寻找某个元素的位置,找到就返回其索引,否则返回-1。不过indexOf的参数是一个值(要寻找的值),而findIndex()的参数是一个回调函数,findIndex寻找的是第一个符合条件的值的索引。所以findIndex方法更灵活

map()是对数组的每个元素执行回调函数,map()返回的结果就是每次调用回调函数的返回值所组成的数组。(回调函数没return时,默认返回undefined)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值