JavaScript 中最常用的数组方法整理汇总
英文 | https://javascript.plainenglish.io/20-most-used-array-methods-in-javascript-c57276982377
翻译 | 杨小爱
在 JavaScript 中,一个数组实例有 37 个内置方法,常用的方法大约有 20 个。在这篇文章中,我对这些方法进行了总结,并附上了一些图表,希望能帮助你更好地整理相关知识点。
push, pop, shift, unshift
这四种方法非常相似,我们一起来谈谈。
push(element) :将一个或多个元素添加到数组的末尾,并返回数组的新长度。
pop():从数组中删除最后一个元素并返回该元素。
shift() :从数组中移除第一个元素并返回移除的元素。
unshift() :将一个或多个元素添加到数组的开头并返回数组的新长度。
测试一下:
push:
const animals = ['pigs', 'goats', 'sheep'];
const count = animals.push('cows');
console.log(count);
// expected output: 4
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows"];
const myFish = ['angel', 'clown', 'mandarin', 'surgeon'];
console.log('myFish before:', myFish);
// myFish before: ['angel', 'clown', 'mandarin', 'surgeon']
const shifted = myFish.shift();
console.log('myFish after:', myFish);
// myFish after: ['clown', 'mandarin', 'surgeon']
console.log('Removed this element:', shifted);
// Removed this element: angel
;
unshift:
const array1 = [1, 2, 3];
console.log(array1.unshift(4, 5));
// expected output: 5
console.log(array1);
// expected output: Array [4, 5, 1, 2, 3]
;
slice() 方法返回数组一部分的浅拷贝。
它返回一个新数组,并且不会修改原始数组。
语法:
array.slice(startIndex, endIndex)
let arr = ['a', 'b', 'c', 'd', 'e', 'f']
console.log('arr.slice(1, 4) : ', arr.slice(1, 4))
console.log('arr.slice(2) : ', arr.slice(2))
console.log('arr.slice() : ', arr.slice());
splice() 方法通过删除或替换现有元素和/或在适当位置添加新元素来更改数组的内容。
语法:
splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)
splice(start, deleteCount, item1, item2, itemN)
start:开始更改数组的索引。
deleteCount:一个整数,指示数组中要从开始删除的元素数。
item1, item2, ...:要添加到数组中的元素,从 start 开始。
测试一下:
let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
let removed = myFish.splice(2, 0, 'drum')
console.log('myFish: ', myFish)
console.log('removed: ', removed);
let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
let removed = myFish.splice(2, 0, 'drum')
console.log('myFish: ', myFish)
console.log('removed: ', removed);
concat
concat() 方法用于合并两个或多个数组。
此方法不会更改现有数组,而是返回一个新数组。
测试一下:
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
console.log(array3);
// expected output: Array ["a", "b", "c", "d", "e", "f"];
join
join() 方法通过连接数组中的所有元素创建并返回一个新字符串,该数组由逗号或指定的分隔符字符串分隔。
语法:
join(separator)
测试一下:
let arr = ['a', 'b', 'c', 'd'];
console.log(`arr.join(''): `, arr.join(''))
console.log(`arr.join('-'): `, arr.join('-'))
console.log(`arr.join(): `, arr.join())
console.log(`arr.join('🚚'): `, arr.join('🚚'));
你可以猜一猜他们的输出结果是多少?
every
every() 方法测试数组中的所有元素是否通过提供的函数实现的测试,它返回一个布尔值。
测试一下:
function isEven(num){
return num % 2 === 0
}
console.log([2, 4, 6, 0].every(isEven))
console.log([2, 5, 6, 9].every(isEven))
console.log([2, 4, 7, 0].every(isEven));
some
some() 方法测试数组中的至少一个元素是否通过了提供的函数实现的测试。
如果在数组中找到所提供函数为其返回 true 的元素,则返回 true;
否则,它返回 false。
它不会修改数组。
测试一下:
function isEven(num){
return num % 2 === 0
}
console.log([2, 4, 6, 1].some(isEven))
console.log([1, 5, 7, 9].some(isEven))
console.log([2, 4, 7, 0].some(isEven));
map
map() 方法创建一个新数组,其中填充了在调用数组中的每个元素上调用提供的函数的结果。
语法:
// Arrow function
map((element) => { /* ... */ })
map((element, index) => { /* ... */ })
map((element, index, array) => { /* ... */ })
// Callback function
map(callbackFn)
map(callbackFn, thisArg)
测试一下
const double = ele => ele * 2
let arr = [1, 2, 3, 4, 5]
console.log(arr.map(double));
reduce
reduce() 方法按顺序对数组的每个元素执行用户提供的“reducer”回调函数,传入前一个元素的计算返回值。在数组的所有元素上运行 reducer 的最终结果是单个值。
reduce((previousValue, currentValue) => { /* ... */ } )
我知道上面抽象的概念不好理解,我们来看一个例子。
var arr = ['a', 'b', 'c', 'd', 'e'];
function add(x, y) {
return x + y;
}
arr.reduce(add)
这段代码是如何执行的?
在这段代码中,reducer 是 add 。
首先,因为我们是第一次执行add,所以数组中的第一个元素'a'会被当作add的第一个参数,然后循环会从数组的第二个元素'b'开始。这一次,'b' 是 add 的第二个参数。
var arr = ['a', 'b', 'c', 'd', 'e'];
function add(x, y) {
return x + y;
}
arr.reduce(add);
filter
filter() 方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。
测试一下
function isEven(num){
return num % 2 === 0
}
let arr = [1, 2, 3, 4, 5, 6]
console.log(arr.filter(isEven))
console.log(arr.filter(ele => ele > 100));
fill
fill() 方法将数组中的所有元素更改为静态值,从开始索引(默认 0)到结束索引(默认 array.length)。它返回修改后的数组。
语法:
fill(value)
fill(value, start)
fill(value, start, end)
find() :返回数组中满足提供的测试函数的第一个元素的值,如果没有找到合适的元素,则返回 undefined。
findIndex() :返回数组中满足提供的测试函数的第一个元素的索引,如果没有找到合适的元素,则返回 -1。
findLast() :返回数组中满足提供的测试函数的最后一个元素的值,如果没有找到合适的元素,则返回 undefined。
findLastIndex() :返回数组中满足提供的测试函数的最后一个元素的索引,如果没有找到合适的元素,则返回 -1。
let arr = [2, 'a', 7, 0, 'a', 0]
const isString = ele => typeof ele === 'string'
console.log(arr.find(isString))
console.log(arr.findIndex(isString))
console.log(arr.findLast(isString))
console.log(arr.findLastIndex(isString));
总结
以上就是我今天跟你分享的关于JavaScript常用数组的总结,如果你觉得有用的话,请记得点赞我,关注我,并将它分享给你身边做开发的朋友,也许能够帮助到他。
最后,感谢你的阅读,祝编程愉快!
学习更多技能
请点击下方公众号