是什么
- JavaScript 的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象,非常的常用,因此需要牢牢的掌握这块的知识。
- 数组常用方法有哪些:
- 是否会修改原数组;
- 返回值是什么;
- 原数组;
- 新数组;
- 元素值;
- 数组长度;
- 操作类型:
- 增删改查;
- 遍历;
- 排序。
会修改原数组的方法
增删改
arr.push(element1, ..., elementN)
- 尾部插入元素
- 当调用该方法时,新的 length 属性值将被返回。
arr.pop()
- 删除最后一个元素,并返回该元素的值
- 从数组中删除的元素(当数组为空时返回 undefined)。
arr.unshift(element1, ..., elementN)
- 要添加到数组开头的元素或多个元素。
- 当一个对象调用该方法时,返回其 length 属性值。
arr.shift()
- 从数组中移除索引为 0的元素;
- 如果数组为空则返回 undefined。
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
- splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。
- 此方法会改变原数组。
- 由被删除的元素组成的一个数组。
arr.fill(value[, start[, end]])
- 会修改原数组的 start 到 end 位置的元素;
- 返回修改后的数组;
arr.copyWithin(target[, start[, end]])
- 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。
- 返回改变后的数组。
数组生成操作
Array.from(arrayLike[, mapFn[, thisArg]])
- 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
- 返回一个新的数组实例。
Array.of(element0[, element1[, ...[, elementN]]])
- 新的 Array 实例。
console.log(Array.from({ length: 7 }));
console.log(Array.from('foo'));
console.log(Array.from([1, 2, 3], (x) => x + x));
const set = new Set(['foo', 'bar', 'baz', 'foo']);
Array.from(set);
Array.of(7);
Array.of(1, 2, 3);
Array(7);
Array(1, 2, 3);
排序操作
arr.reverse()
- 方法将数组中元素的位置颠倒,并返回该数组,会修改原数组。
- 返回修改后的原数组。
arr.sort([compareFunction])
- 用原地算法对数组的元素进行排序。
- 排序后的数组。请注意,数组已原地排序,并且不进行复制。
var arr = [1, 2, 3, 5, 6, 7, 8];
console.log('push: \n返回值: ', arr.push(4), '\n原数组:', arr);
console.log('pop: \n返回值: ', arr.pop(), '\n原数组:', arr);
console.log('unshift: \n返回值: ', arr.unshift(5), '\n原数组:', arr);
console.log('shift: \n返回值: ', arr.shift(), '\n原数组:', arr);
console.log('splice: \n返回值: ', arr.splice(1, 1, 9, 10), '\n原数组:', arr);
console.log('copyWithin: \n返回值: ', arr.copyWithin(1, 3, 5), '\n原数组:', arr);
console.log('fill: \n返回值: ', arr.fill(0, 4, 6), '\n原数组:', arr);
console.log('reverse: \n返回值: ', arr.reverse(), '\n原数组:', arr);
console.log(
'sort: \n返回值: ',
arr.sort((a, b) => a - b),
'\n原数组:',
arr,
);
不会修改原数组的方法
数组遍历方法
arr.map(function callback(currentValue[, index[, array]])
- 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值。
- 回调函数的结果组成了新数组的每一个元素。
arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
- 方法对数组的每个元素执行一次给定的函数。
- 无法中断。
- 返回 undefined。
arr.every(callback[, thisArg])
- 如果回调函数的每一次返回都为 truthy 值,返回 true ,否则返回 false。
- 中断很容易,返回 false 就好了,方便迭代;
- 返回一个 boolean 值;
arr.some(callback(element[, index[, array]])[, thisArg])
- 数组中有至少一个元素通过回调函数的测试就会返回 true;所有元素都没有通过回调函数的测试返回值才会为 false。
- 方便迭代中断。
- 返回一个 boolean 值。
arr.filter(callback(element[, index[, array]])[, thisArg])
- filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
- 返回一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])/arr.reduceRight
- 返回函数累计处理的结果;
arr.find(callback[, thisArg])/arr.findIndex(callback[, thisArg])
- 返回:数组中第一个满足所提供测试函数的元素的值/索引,否则返回 undefined。
- 如果你需要找到一个元素的位置或者一个元素是否存在于数组中,使用 Array.prototype.indexOf() 或 Array.prototype.includes()。
var newArray = arr.flat([depth]) / var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
- flat() 方法会按照一个可指定的深度递归遍历数组,
- 并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
arr.indexOf(searchElement[, fromIndex])/arr.lastIndexOf(searchElement[, fromIndex])/lastIndexOf
- 返回首个被找到的元素在数组中的索引位置;
- 若没有找到则返回 -1
var arr = [1, 2, 3];
console.log(
'find: \n返回值: ',
arr.find((item) => item % 2),
'\n原数组:',
arr,
);
var arr2 = [[1], [2, [3]], 5];
console.log('flat: \n返回值: ', arr2.flat(1), arr2.flat(2), '\n原数组:', arr2);
返回数组的信息
arr.entries()
- 方法返回一个新的 Array Iterator 对象,该对象包含数组中每个索引的键/值对。
- 一个新的 Array 迭代器对象。Array Iterator 是对象,它的原型(proto:Array Iterator)上有一个 next 方法,可用用于遍历迭代器取得原数组的[key,value]。
arr.keys()/arr.values()
- 方法返回一个包含数组中每个索引键/值的 Array Iterator 对象。
- 返回一个新的 Array 迭代器对象。
var arr = [1, 2, 3];
console.log('entries: \n返回值: ', arr.entries(), [...arr.entries()], '\n原数组:', arr);
console.log('keys: \n返回值: ', arr.keys(), [...arr.keys()], '\n原数组:', arr);
数组合并操作
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
- 将数组和/或值连接成新数组。
var alpha = ['a', 'b', 'c'];
var numeric = [1, 2, 3];
console.log('concat: \n返回值: ', alpha.concat(numeric), '\n原数组:', alpha);
console.log(
'concat: \n返回值: ',
alpha.concat(1, 2, [3, [30]], [4, 5], numeric),
'\n原数组:',
alpha,
);
判断方法
Array.isArray()
- 如果值是 Array,则为 true; 否则为 false。
contact
github 源文件地址