JavaScript Array 经常使用函数整理

按字母顺序整理html

索引数组

Array.prototype.concat()浏览器

Array.prototype.filter()app

Array.prototype.indexOf()less

Array.prototype.join()函数

Array.prototype.map()测试

Array.prototype.pop()ui

Array.prototype.push()this

Array.prototype.reduce()spa

Array.prototype.reverse()

Array.prototype.shift()

Array.prototype.slice()

Array.prototype.sort()

Array.prototype.splice()

Array.prototype.toString()

Array.prototype.unshift()

 

Array.prototype.concat()

concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回.

语法

var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])

参数

valueN
须要与原数组合并的数组或非数组值。详见下文。

返回值

新的 Array 实例。

描述

concat 方法将建立一个新的数组,而后将调用它的对象(this 指向的对象)中的元素以及全部参数中的数组类型的参数中的元素以及非数组类型的参数自己按照顺序放入这个新数组,并返回该数组.

concat 方法并不修改调用它的对象(this 指向的对象) 和参数中的各个数组自己的值,而是将他们的每一个元素拷贝一份放在组合成的新数组中.原数组中的元素有两种被拷贝的方式:

  • 对象引用(非对象直接量):concat 方法会复制对象引用放到组合的新数组里,原数组和新数组中的对象引用都指向同一个实际的对象,因此,当实际的对象被修改时,两个数组也同时会被修改.
  • 字符串和数字(是原始值,而不是包装原始值的 String 和 Number 对象): concat 方法会复制字符串和数字的值放到新数组里.

注意: 链接一个或多个数组(值)将不会改变本来的数组/值。进一步说,任何对新数组的操做都不会对原有的数组形成影响(仅当该元素不是对象的引用时),反之亦然。

Array.prototype.filter()

概述

filter() 方法使用指定的函数测试全部元素,并建立一个包含全部经过测试的元素的新数组。

语法

var new_arrary = arr.filter(callback[, thisArg])

参数

callback
用来测试数组的每一个元素的函数。调用时使用参数 (element, index, array)。
返回true表示保留该元素(经过测试),false则不保留。
thisArg
可选。执行 callback 时的用于 this 的值。

描述

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

callback 被调用时传入三个参数:

  1. 元素的值
  2. 元素的索引
  3. 被遍历的数组

若是为 filter 提供一个 thisArg 参数,则它会被做为 callback 被调用时的 this 值。不然,callback 的 this 值在非严格模式下将是全局对象,严格模式下为 undefined
The thisvalue ultimately observable by callback is determined according to the usual rules for determining thethis seen by a function.

filter 不会改变原数组。

filter 遍历的元素范围在第一次调用 callback 以前就已经肯定了。在调用 filter 以后被添加到数组中的元素不会被 filter 遍历到。若是已经存在的元素被改变了,则他们传入 callback 的值是 filter 遍历到它们那一刻的值。被删除或历来未被赋值的元素不会被遍历到。

Array.prototype.indexOf()

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

语法

arr.indexOf(searchElement[, fromIndex = 0])

参数

searchElement
要查找的元素
fromIndex
开始查找的位置。若是该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。若是参数中提供的索引值是一个负值,则将其做为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。 注意:若是参数中提供的索引值是一个负值,仍然从前向后查询数组。若是抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0.

描述

indexOf 使用strict equality (不管是 ===, 仍是 triple-equals操做符都基于一样的方法)进行判断 searchElement与数组中包含的元素之间的关系。

 

Array.prototype.join()

join() 方法将数组中的全部元素链接成一个字符串。

语法

str = arr.join([separator = ','])

参数

separator
可选,用于指定链接每一个数组元素的分隔符。分隔符会被转成字符串类型;若是省略的话,默认为一个逗号。若是 seprator 是一个空字符串,那么数组中的全部元素将被直接链接。

描述

全部的数组元素被转换成字符串,再用一个分隔符将这些字符串链接起来。若是元素是undefined 或者null, 则会转化成空字符串。

 

Array.prototype.map()

概述

map() 方法返回一个由原数组中的每一个元素调用一个指定方法后的返回值组成的新数组。

语法

array.map(callback[, thisArg])

参数

callback
原数组中的元素通过该方法后返回一个新的元素。
currentValue
callback 的第一个参数,数组中当前被传递的元素。
index
callback 的第二个参数,数组中当前被传递的元素的索引。
array
callback 的第三个参数,调用 map 方法的数组。
thisArg
执行 callback 函数时 this 指向的对象。

描述

map 方法会给原数组中的每一个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值组合起来造成一个新数组。 callback 函数只会在有值的索引上被调用;那些历来没被赋过值或者使用 delete 删除的索引则不会被调用。

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

若是 thisArg 参数有值,则每次 callback 函数被调用的时候,this 都会指向 thisArg 参数上的这个对象。若是省略了 thisArg 参数,或者赋值为 null 或 undefined,则 this 指向全局对象 。

map 不修改调用它的原数组自己(固然能够在 callback 执行时改变原数组)。

使用 map 方法处理数组时,数组元素的范围是在 callback 方法第一次调用以前就已经肯定了。在 map 方法执行的过程当中:原数组中新增长的元素将不会被 callback 访问到;若已经存在的元素被改变或删除了,则它们的传递到 callback 的值是 map 方法遍历到它们的那一时刻的值;而被删除的元素将不会被访问到。

Array.prototype.pop()

概述

pop() 方法删除一个数组中的最后的一个元素,而且返回这个元素。

语法

array.pop()

描述

pop 方法删除一个数组中的最后一个元素,而且把这个删除掉的元素返回给调用者。

pop 被有意设计成具备通用性,该方法能够经过 call 或 apply 方法应用于一个类数组(array-like)对象上。

Array.prototype.push()

push() 方法添加一个或多个元素到数组的末尾,并返回数组新的长度(length 属性值)。

语法

arr.push(element1, ..., elementN)

参数

elementN
被添加到数组末尾的元素。

返回值

当调用该方法时,新的 length 属性值将被返回。

描述

push 方法把值添加到数组中。

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

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

Array.prototype.reduce()

概述

reduce() 方法接收一个函数做为累加器(accumulator),数组中的每一个值(从左到右)开始合并,最终为一个值。

语法

arr.reduce(callback,[initialValue])

参数

callback
执行数组中每一个值的函数,包含四个参数
previousValue
上一次调用回调返回的值,或者是提供的初始值(initialValue)
currentValue
数组中当前被处理的元素
index
当前元素在数组中的索引
array
调用 reduce 的数组
initialValue
做为第一次调用 callback 的第一个参数。

描述

reduce 为数组中的每个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

回调函数第一次执行时,previousValue 和 currentValue 的取值有两种状况,若是 initialValue 在调用 reduce 时被提供,那么第一个 previousValue 等于 initialValue ,而且currentValue 等于数组中的第一个值;若是initialValue 未被提供,那么previousValue 等于数组中的第一个值,currentValue等于数组中的第二个值。

若是数组为空而且没有提供initialValue, 会抛出TypeError 。若是数组仅有一个元素(不管位置如何)而且没有提供initialValue, 或者有提供initialValue可是数组为空,那么此惟一值将被返回而且callback不会被执行。

Array.prototype.reverse()

reverse() 方法颠倒数组中元素的位置。第一个元素会成为最后一个,最后一个会成为第一个。

语法

 arr.reverse()

参数

描述

reverse 方法颠倒数组中元素的位置,并返回该数组的引用。

Array.prototype.shift()

shift() 方法删除数组的 第一个 元素,并返回这个元素。该方法会改变数组的长度。

语法

arr.shift()

描述

shift 方法移除索引为 0 的元素(即第一个元素),并返回被移除的元素,其余元素的索引值随之减 1。若是 length 属性的值为 0 (长度为 0),则返回undefined

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

Array.prototype.slice()

slice() 方法会浅复制(shallow copy)数组的一部分到一个新的数组,并返回这个新数组。

语法

arr.slice([begin[, end]])

参数

begin
从该索引处开始提取原数组中的元素(从0开始)。
若是该参数为负数,则表示从原数组中的倒数第几个元素开始提取,slice(-2)表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
若是省略 begin,则 slice 从索引 0 开始。
end
在该索引处结束提取原数组元素(从0开始)。slice会提取原数组中索引从 begin 到 end 的全部元素(包含begin,但不包含end)。
slice(1,4) 提取原数组中的第二个元素开始直到第四个元素的全部元素 (索引为 1, 2, 3的元素)。
若是该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1)表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
若是 end 被省略,则slice 会一直提取到原数组末尾。

返回值

一个含有提取元素的新数组

描述

slice 不修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。原数组的元素会按照下述规则拷贝:

  • 若是该元素是个对象引用 (不是实际的对象),slice 会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。若是被引用的对象发生改变,则新的和原来的数组中的这个元素也会发生改变。
  • 对于字符串、数字及布尔值来讲(不是 StringNumber 或者 Boolean 对象),slice 会拷贝这些值到新的数组里。在别的数组里修改这些字符串或数字或是布尔值,将不会影响另外一个数组。

若是向两个数组任一中添加了新元素,则另外一个不会受到影响。

Array.prototype.sort()

sort() 方法对数组的元素作原地的排序,并返回这个数组。 sort 排序多是不稳定的。默认按照字符串的Unicode码位点(code point)排序。

语法

arr.sort([compareFunction])

参数

compareFunction
可选。用来指定按某种顺序进行排列的函数。若是省略,元素按照转换为的字符串的诸个字符的Unicode位点进行排序。

描述

若是没有指明 compareFunction ,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。例如 "Banana" 会被排列到 "cherry" 以前。数字比大小时,9 出如今 80 以前,但这里比较时数字会先被转换为字符串,因此 "80" 比 "9" 要靠前。

var fruit = ['cherries', 'apples', 'bananas'];

fruit.sort(); // ['apples', 'bananas', 'cherries']

var scores = [1, 10, 2, 21];

scores.sort(); // [1, 10, 2, 21]

// Watch out that 10 comes before 2,

// because '10' comes before '2' in Unicode code point order.

var things = ['word', 'Word', '1 Word', '2 Words'];

things.sort(); // ['1 Word', '2 Words', 'Word', 'word']

// In Unicode, numbers come before upper case letters,

// which come before lower case letters.

若是指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。记 a 和 b 是两个将要被比较的元素:

  • 若是 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 以前;
  • 若是 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,并且也不是全部浏览器都会遵照(例如 Mozilla 在 2003 年以前的版本);
  • 若是 compareFunction(a, b) 大于 0 , b 会被排列到 a 以前。
  • compareFunction(a, b) 必须老是对相同的输入返回相同的比较结果,不然排序的结果将是不肯定的。

因此,比较函数格式以下:

function compare(a, b) {

if (a is less than b by some ordering criterion) {

return -1;

}

if (a is greater than b by the ordering criterion)

{

return 1;

} // a must be equal to b return 0;

}

但愿比较数字而非字符串,比较函数能够简单的以 a 减 b,以下的函数将会将数组升序排列

function compareNumbers(a, b) { return a - b; }

sort 方法可使用 函数表达式 方便地书写:

var numbers = [4, 2, 5, 1, 3];

numbers.sort(function(a, b) {

return a - b;

});

console.log(numbers); // [1, 2, 3, 4, 5]

对象能够按照某个属性排序:

var items = [ { name: 'Edward', value: 21 }, { name: 'Sharpe', value: 37 }, { name: 'And', value: 45 }, { name: 'The', value: -12 }, { name: 'Magnetic' }, { name: 'Zeros', value: 37 } ];

items.sort(function (a, b) {

if (a.value > b.value) {

return 1;

}

if (a.value < b.value) {

return -1;

} // a 必须等于 b return 0; });

 

Array.prototype.splice()

 

splice() 方法用新元素替换旧元素,以此修改数组的内容。

语法

array.splice(start, deleteCount[, item1[, item2[, ...]]])

参数

start​
从数组的哪一位开始修改内容。若是超出了数组的长度,则从数组末尾开始添加内容;若是是负值,则表示从数组末位开始的第几位。
deleteCount
整数,表示要移除的数组元素的个数。若是 deleteCount 是 0,则不移除元素。这种状况下,至少应添加一个新元素。若是 deleteCount 大于start以后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。
itemN
要添加进数组的元素。若是不指定,则 splice() 只删除数组元素。

返回值

由被删除的元素组成的一个数组。若是只删除了一个元素,则返回只包含一个元素的数组。若是没有删除元素,则返回空数组。

描述

若是添加进数组的元素个数不等于被删除的元素个数,数组的长度会发生相应的改变。

提示和注释

注释:请注意,splice() 方法与 slice() 方法的做用是不一样的,splice() 方法会直接对数组进行修改。

示例

使用 splice()

以下代码演示了 splice 的用法:

Array.prototype.toString()

概述

toString() 返回一个字符串,表示指定的数组及其元素。

语法

arr.toString()

参数

描述

Array 对象覆盖了 Object 的 toString 方法。对于数组对象,toString 方法返回一个字符串,该字符串由数组中的每一个元素的 toString() 返回值经调用 join() 方法链接(由逗号隔开)组成。例如,下面的代码建立了一个数组,而后使用 toString 方法把该数组转成一个字符串。

var monthNames = ['Jan', 'Feb', 'Mar', 'Apr'];

var myVar = monthNames.toString(); // assigns "Jan,Feb,Mar,Apr" to myVar.

当一个数组被做为文本值或者进行字符串链接操做时,将会自动调用其 toString 方法。

ECMAScript 5 semantics

从 JavaScript 1.8.5 (Firefox 4) 开始,和 ECMAScript 第5版语义(semantics)一致,toString() 方法是通用的,可被用于任何对象。若是对象有一个 join() 方法,将会被调用,其返回值将被返回。没有则调用 Object.prototype.toString() 方法。

Array.prototype.unshift()

概述

unshift() 方法在数组的开头添加一个或者多个元素,并返回数组新的 length 值。

语法

arr.unshift(element1, ..., elementN)

参数列表

element1, ..., elementN
要添加到数组开头的元素。

返回值

当一个对象调用该方法时,返回其 length 属性值。

描述

unshift 方法会在调用它的类数组(array-like)对象的开始位置插入给定的参数。

unshift 特地被设计成具备通用性;这个方法可以经过 call 或 apply 方法做用于相似数组的对象上。不过对于没有 length 属性(表明从0开始的一系列连续的数字属性的最后一个)的对象,调用该方法可能没有任何意义。

相关文章
相关标签/搜索