目录算法
flatMap 首先使用映射函数映射每一个元素,而后将结果压缩成一个新数组。它与 map 和 深度值1的 flat 几乎相同,但 flatMap 一般在合并成一种方法的效率稍微高一些。api
values 返回一个新的 Array Iterator 对象,该对象包含数组每一个索引的值数组
上面列出了在js
数组当中常见的方法,下面在其中选取一些比较高频和重要的方法来讲明。函数
从一个相似数组或可迭代对象中建立一个新的数组实例。测试
语法:this
Array.from(arrayLike[, mapFn[, thisArg]])
参数:prototype
返回值:
一个新的数组实例。code
demo:对象
Array.from('foo'); // ["f", "o", "o"]
用于肯定传递的值是不是一个 Array。排序
语法:
Array.isArray(obj)
参数:
demo:
Array.isArray([1, 2, 3]); // true
用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
语法:
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
参数:
demo:
var array1 = ['a', 'b', 'c']; var array2 = ['d', 'e', 'f']; console.log(array1.concat(array2)); // expected output: Array ["a", "b", "c", "d", "e", "f"]
测试数组的全部元素是否都经过了指定函数的测试。
语法:
arr.every(callback[, thisArg])
参数:
demo:
function isBelowThreshold(currentValue) { return currentValue < 40; } var array1 = [1, 30, 39, 29, 10, 13]; console.log(array1.every(isBelowThreshold)); // expected output: true
用一个固定值填充一个数组中从起始索引到终止索引内的所有元素。不包括终止索引。
语法:
arr.fill(value[, start[, end]])
参数:
返回值:
修改后的数组。
建立一个新数组, 其包含经过所提供函数实现的测试的全部元素。
语法:
var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
参数:
返回值:
一个新的、由经过测试的元素组成的数组,若是没有任何数组元素经过测试,则返回空数组。
demo:
var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']; const result = words.filter(word => word.length > 6); console.log(result); // expected output: Array ["exuberant", "destruction", "present"]
返回数组中知足提供的测试函数的第一个元素的值。不然返回 undefined。
语法:
arr.find(callback[, thisArg])
参数:
demo:
var array1 = [5, 12, 8, 130, 44]; var found = array1.find(function(element) { return element > 10; }); console.log(found); // expected output: 12
对数组的每一个元素执行一次提供的函数。
语法:
arr.forEach(callback[, thisArg]);
参数:
demo:
var array1 = ['a', 'b', 'c']; array1.forEach(function(element) { console.log(element); }); // expected output: "a" // expected output: "b" // expected output: "c"
返回在数组中能够找到一个给定元素的第一个索引,若是不存在,则返回-1。
语法:
arr.indexOf(searchElement) arr.indexOf(searchElement[, fromIndex = 0])
参数:
返回值:
首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
demo:
var beasts = ['ant', 'bison', 'camel', 'duck', 'bison']; console.log(beasts.indexOf('bison')); // expected output: 1 // start from index 2 console.log(beasts.indexOf('bison', 2)); // expected output: 4 console.log(beasts.indexOf('giraffe')); // expected output: -1
将一个数组(或一个类数组对象)的全部元素链接成一个字符串并返回这个字符串。若是数组只有一个项目,那么将返回该项目而不使用分隔符。
语法:
arr.join([separator])
参数:
返回值:
一个全部数组元素链接的字符串。若是 arr.length 为0,则返回空字符串。
demo:
var elements = ['Fire', 'Air', 'Water']; console.log(elements.join()); // expected output: "Fire,Air,Water" console.log(elements.join('')); // expected output: "FireAirWater" console.log(elements.join('-')); // expected output: "Fire-Air-Water"
返回一个包含数组中每一个索引键的Array Iterator对象。
语法:
arr.keys()
返回值:
一个新的 Array 迭代器对象。
demo:
var array1 = ['a', 'b', 'c']; var iterator = array1.keys(); for (let key of iterator) { console.log(key); // expected output: 0 1 2 }
建立一个新数组,其结果是该数组中的每一个元素都调用一个提供的函数后返回的结果。
语法:
var new_array = arr.map(function callback(currentValue[, index[, array]]) { // Return element for new_array }[, thisArg])
参数:
返回值:
一个新数组,每一个元素都是回调函数的结果。
demo:
var array1 = [1, 4, 9, 16]; // pass a function to map const map1 = array1.map(x => x * 2); console.log(map1); // expected output: Array [2, 8, 18, 32]
从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。
语法:
arr.pop()
返回值:
从数组中删除的元素(当数组为空时返回undefined)。
demo:
var plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato']; console.log(plants.pop()); // expected output: "tomato" console.log(plants); // expected output: Array ["broccoli", "cauliflower", "cabbage", "kale"] plants.pop(); console.log(plants); // expected output: Array ["broccoli", "cauliflower", "cabbage"]
对数组中的每一个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
语法:
arr.reduce(callback[, initialValue])
参数:
currentValue
数组中正在处理的元素。
currentIndex可选
数组中正在处理的当前元素的索引。 若是提供了initialValue,则起始索引号为0,不然为1。
array可选
调用reduce()的数组
返回值:
函数累计处理的结果.
demo:
const array1 = [1, 2, 3, 4]; const reducer = (accumulator, currentValue) => accumulator + currentValue; // 1 + 2 + 3 + 4 console.log(array1.reduce(reducer)); // expected output: 10 // 5 + 1 + 2 + 3 + 4 console.log(array1.reduce(reducer, 5)); // expected output: 15
将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组。
语法:
arr.reverse()
demo :
var array1 = ['one', 'two', 'three']; console.log('array1: ', array1); // expected output: Array ['one', 'two', 'three'] var reversed = array1.reverse(); console.log('reversed: ', reversed); // expected output: Array ['three', 'two', 'one'] /* Careful: reverse is destructive. It also changes the original array */ console.log('array1: ', array1); // expected output: Array ['three', 'two', 'one']
返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。
语法:
arr.slice(); // [0, end] arr.slice(begin); // [begin, end] arr.slice(begin, end); // [begin, end)
参数:
返回值:
一个含有提取元素的新数组
demo:
var animals = ['ant', 'bison', 'camel', 'duck', 'elephant']; console.log(animals.slice(2)); // expected output: Array ["camel", "duck", "elephant"] console.log(animals.slice(2, 4)); // expected output: Array ["camel", "duck"] console.log(animals.slice(1, 5)); // expected output: Array ["bison", "camel", "duck", "elephant"]
测试是否至少有一个元素经过由提供的函数实现的测试。
语法:
arr.some(callback(element[, index[, array]])[, thisArg])
参数:
返回值:
若是回调函数返回任何数组元素的truthy值,则返回true;不然为false。
demo:
var array = [1, 2, 3, 4, 5]; var even = function(element) { // checks whether an element is even return element % 2 === 0; }; console.log(array.some(even)); // expected output: true
用原地算法对数组的元素进行排序,并返回数组。排序算法如今是稳定的。默认排序顺序是根据字符串Unicode码点。
语法:
arr.sort([compareFunction])
参数:
返回值:
排序后的数组。请注意,数组已原地排序,而且不进行复制。
demo:
var months = ['March', 'Jan', 'Feb', 'Dec']; months.sort(); console.log(months); // expected output: Array ["Dec", "Feb", "Jan", "March"] var array1 = [1, 30, 4, 21, 100000]; array1.sort(); console.log(array1); // expected output: Array [1, 100000, 21, 30, 4]
经过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
语法:
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
参数:
start
指定修改的开始位置(从0计数)。若是超出了数组的长度,则从数组末尾开始添加内容;若是是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素而且等价于array.length-n);若是负数的绝对值大于数组的长度,则表示开始位置为第0位。
deleteCount 可选
整数,表示要移除的数组元素的个数。
若是 deleteCount 大于 start 以后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。
若是 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是说,若是它大于或者等于start以后的全部元素的数量),那么start以后数组的全部元素都会被删除。
若是 deleteCount 是 0 或者负数,则不移除元素。这种状况下,至少应添加一个新元素。
item1, item2, ... 可选
要添加进数组的元素,从start 位置开始。若是不指定,则 splice() 将只删除数组元素。
返回值:
由被删除的元素组成的一个数组。若是只删除了一个元素,则返回只包含一个元素的数组。若是没有删除元素,则返回空数组。
demo:
var months = ['Jan', 'March', 'April', 'June']; months.splice(1, 0, 'Feb'); // inserts at index 1 console.log(months); // expected output: Array ['Jan', 'Feb', 'March', 'April', 'June'] months.splice(4, 1, 'May'); // replaces 1 element at index 4 console.log(months); // expected output: Array ['Jan', 'Feb', 'March', 'April', 'May']
具体方法介绍能够访问:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array