图解 JS 常用的数组方法

2ccef559235c86de873f5346648575bb.jpeg

英文 | https://javascript.plainenglish.io/20-most-used-array-methods-in-javascript-c57276982377

翻译 | 杨小爱

在 JavaScript 中,一个数组实例有 37 个内置方法,常用的方法大约有 20 个。在这篇文章中,我对这些方法进行了总结,并附上了一些图表,希望能帮助你更好地整理相关知识点。

push, pop, shift, unshift

这四种方法非常相似,我们一起来谈谈。

  • push(element) :将一个或多个元素添加到数组的末尾,并返回数组的新长度。

  • pop():从数组中删除最后一个元素并返回该元素。

  • shift() :从数组中移除第一个元素并返回移除的元素。

  • unshift() :将一个或多个元素添加到数组的开头并返回数组的新长度。

以下是一些操作:

07dcac6c64cfd35015b45e4bfdd28108.png

以下是一些操作:

6fbe4ac1cacb92b5e376a0c299590c61.png

测试一下:

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"];

shift:

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

  • slice() 方法返回数组一部分的浅拷贝。

  • 它返回一个新数组,并且不会修改原始数组。

c52045b68137d41c5100f8907e61c93d.png

语法:

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() 方法通过删除或替换现有元素和/或在适当位置添加新元素来更改数组的内容。

语法:

splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)
splice(start, deleteCount, item1, item2, itemN)
  • start:开始更改数组的索引。

  • deleteCount:一个整数,指示数组中要从开始删除的元素数。

  • item1, item2, ...:要添加到数组中的元素,从 start 开始。

881cbfd7a9f0426463612681e7846721.png

0ce39e6b515548b50570d823157e26d3.png

测试一下:

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() 方法用于合并两个或多个数组。

  • 此方法不会更改现有数组,而是返回一个新数组。

7ba39481fe26f3c40d7296fa73f6a4aa.png

测试一下:

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)

6f787f566f3076f315262766956b91c0.png

测试一下:

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() 方法测试数组中的所有元素是否通过提供的函数实现的测试,它返回一个布尔值。

8bc58ba7a7b481cc433c0d58a213a710.png

测试一下:

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。

ceffab64cde8b59bfe92401f880a30d3.png

它不会修改数组。

测试一下:

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 的第二个参数。

661c1c765461427729d7ba962b837fb6.png

第一次计算后,我们得到结果'ab'。此结果将被缓存并在下一次添加计算中用作 param1。同时,数组中的第三个参数'c'将用作add的param2。

963951400582a64042b42bd44e3e9a55.png

同样,reduce 会继续遍历数组中的元素,运行 'abc' 和 'd' 作为 add 的参数。

d2f8f02baf7751ebda59a32d82fc3eda.png

最后,遍历数组中最后一个元素后,返回计算结果。

a7fb022fb73428c537ceea1b8fa5df0f.png

现在我们有了结果:'abcde'。

var arr = ['a', 'b', 'c', 'd', 'e'];


function add(x, y) {
  return x + y;
}


arr.reduce(add);

filter

filter() 方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

05d4eb2c9554d73e631a46fb0c09d0e2.png

测试一下

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)

743ccb2a06143fb6c3c6775172138a84.png

find, findLast, findIndex, findLastIndex

  • find() :返回数组中满足提供的测试函数的第一个元素的值,如果没有找到合适的元素,则返回 undefined。

  • findIndex() :返回数组中满足提供的测试函数的第一个元素的索引,如果没有找到合适的元素,则返回 -1。

  • findLast() :返回数组中满足提供的测试函数的最后一个元素的值,如果没有找到合适的元素,则返回 undefined。

  • findLastIndex() :返回数组中满足提供的测试函数的最后一个元素的索引,如果没有找到合适的元素,则返回 -1。

384ccfbc9c72db362669b11fd1cd1377.png

测试一下:

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常用数组的总结,如果你觉得有用的话,请记得点赞我,关注我,并将它分享给你身边做开发的朋友,也许能够帮助到他。

最后,感谢你的阅读,祝编程愉快!

学习更多技能

请点击下方公众号

d51d895a6edebcbeaad3e16eeccb1d91.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值