js数组操作总结

1.Array.isArray() 用来判断某个值是否为数组。如果是,则返回 true,否则返回 false。

// 下面的函数调用都返回 true
Array.isArray([]);
Array.isArray([1]);
Array.isArray(new Array());
// 鲜为人知的事实:其实 Array.prototype 也是一个数组。
Array.isArray(Array.prototype); 

2.concat() concat 方法将创建一个新的数组,然后将调用它的对象(this 指向的对象)中的元素以及所有参数中的数组类型的参数中的元素以及非数组类型的参数本身按照顺序放入这个新数组,并返回该数组.

3.every() every 方法为数组中的每个元素执行一次 callback 函数,直到它找到一个使 callback 返回 falsy(表示可转换为布尔值 false 的值)的元素。如果发现了一个这样的元素,every 方法将会立即返回 false。否则,callback 为每一个元素返回 true,every 就会返回 true。callback 只会为那些已经被赋值的索引调用。不会为那些被删除或从来没被赋值的索引调用。

callback 被调用时传入三个参数:元素值,元素的索引,原数组。

4.filter() filter 为数组中的每个元素调用一次 callback 函数,并利用所有使得 callback 返回 true 或 等价于 true 的值 的元素创建一个新数组。callback 只会在已经赋值的索引上被调用,对于那些已经被删除或者从未被赋值的索引不会被调用。那些没有通过 callback 测试的元素会被跳过,不会被包含在新数组中。

callback 被调用时传入三个参数:元素的值,元素的索引,被遍历的数组。

5.forEach() forEach 方法按升序为数组中含有效值的每一项执行一次callback 函数,那些已删除(使用delete方法等情况)或者从未赋值的项将被跳过(但不包括哪些值为 undefined 的项)。forEach 不像 every 和 some,它总是返回 undefined。

callback 函数会被依次传入三个参数:数组当前项的值,数组当前项的索引,数组对象本身。

6.indexOf() indexOf()方法返回给定元素能找在数组中找到的第一个索引值,否则返回-1。

indexOf 接受两个参数:要查找的元素,开始查找的位置(可选)。

7.join() join() 方法将数组中的所有元素连接成一个字符串。

join只接受一个可选参数,用于指定连接每个数组元素的分隔符。分隔符会被转成字符串类型;如果省略的话,默认为一个逗号。如果是一个空字符串,那么数组中的所有元素将被直接连接。

8.lastIndexOf() lastIndexOf() 方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。

lastIndexOf() 方法接受两个参数:被查找的元素,开始查找的位置(可选,默认为数组的长度减 1,即整个数组都被查找。如果该值大于或等于数组的长度,则整个数组会被查找。如果为负值,将其视为从数组末尾向前的偏移。**即使该值为负,数组仍然会被从后向前查找。**如果该值为负时,其绝对值大于数组长度,则方法返回 -1,即数组不会被查找)。

lastIndexOf 使用严格相等(===)比较 searchElement 和数组中的元素。

var array = [2, 5, 9, 2];
var index = array.lastIndexOf(2);// index is 3
index = array.lastIndexOf(7);// index is -1
index = array.lastIndexOf(2, 3);// index is 3
index = array.lastIndexOf(2, -1);// index is 3

9.map() map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值组合起来形成一个新数组。 callback 函数只会在有值的索引上被调用;那些从来没被赋过值或者使用 delete 删除的索引则不会被调用。注意:数组元素的范围在 callback 方法第一次调用之前就已经确定。

callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身。

10.pop()/push() pop() 方法删除一个数组中的最后的一个元素,并且返回这个元素。 push() 方法添加一个或多个元素到数组的末尾,并返回数组新的长度(length 属性值)。

pop/push 方法有意具有通用性。该方法和 call() 或 apply() 一起使用时,可应用在类似数组的对象上。push 方法根据 length 属性来决定从哪里开始插入给定的值。如果 length 不能被转成一个数值,则插入的元素索引为 0,包括 length 不存在时。当 length 不存在时,将会创建它。

唯一的原生类数组(array-like)对象是 Strings,尽管如此,它们并不适用该方法,因为字符串是不可改变的。

11.reduce()/reduceRight reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素 reduceRight() 方法接受一个函数作为累加器,让每个值(从右到左,亦即从尾到头)缩减为一个值。(与 reduce() 的执行方向相反)

reduce 接受四个参数和一个可选参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组,第一次调用的初始值(可选)

回调函数第一次执行时,初始值和当前值可以是一个值,如果设置了第一次调用的初始值,初始值等于当前值是一个值,并且等于数组中的第一个值;如果没有设置了第一次调用的初始值,那么初始值等于数组中的第一个值,当前值等于数组中的第二个值。 如果数组为空并且没有提供第一个初始值, 会抛出TypeError 。如果数组仅有一个元素(无论位置如何)并且没有提供第一个初始值, 或者有提供第一个初始值但是数组为空,那么此唯一值将被返回并且callback不会被执行。

[0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
  return previousValue + currentValue;
});
//第一次 初始值0 当前值1 返回1
//第二次 初始值1(来自第一次的返回值) 当前值2 返回3
//以此类推 最终返回10

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
    return a.concat(b);
});
// 数组扁平化 返回[0, 1, 2, 3, 4, 5]

12.reverse() reverse() 方法颠倒数组中元素的位置。

13.shift()/unshift() shift 方法移除索引为 0 的元素(即第一个元素),并返回被移除的元素,其他元素的索引值随之减 1。如果 length 属性的值为 0 (长度为 0),则返回 undefined。 unshift() 方法在数组的开头添加一个或者多个元素,并返回数组新的 length 值。

shift/unshift 方法并不局限于数组:该方法亦可通过 call 或 apply 作用于对象上。对于不包含 length 属性的对象,将添加一个值为 0 的 length 属性。

14.slice() slice() 方法把数组中一部分的浅复制(shallow copy)存入一个新的数组对象中,并返回这个新的数组。

slice 接受两个参数:开始提取索引,结束提取索引

如果该开始/结束索引为负数,则表示从原数组中的倒数第几个元素开始/结束提取,slice(-2)表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素),slice(-2,-1)表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素),默认 slice 从索引 0 开始,到末尾结束.

slice 不修改原数组,只会返回一个包含了原数组中提取的部分元素的一个新数组。原数组的元素会按照下述规则被拷贝(“一级深拷贝"规则):如果该元素是个对象引用 (不是实际的对象),slice 会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。如果被引用的对象发生改变,则改变将反应到新的和原来的数组中。 对于字符串和数字来说(不是 String 和 Number 对象),slice 会拷贝字符串和数字到新的数组里。在一个数组里修改这些字符串或数字,不会影响另一个数组。 如果向两个数组任一中添加了新元素,则另一个不会受到影响。

15.toLocaleString()/toString() toLocaleString() 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 toLocaleString 方法转成字符串,这些字符串将使用一个特定语言环境的字符串(例如一个逗号 “,")隔开。 toString() 返回一个字符串,表示指定的数组及其元素。

Licensed under CC BY-NC-SA 4.0