JavaScript数组常用方法find、findIndex、filter、map、flatMap及some详解_javascript技巧

这些数组方法都是ES6引入的,它们为处理数组提供了更简洁、更函数式的方式。下面我将详细介绍每个方法的用法和使用场景,并提供示例。

作用:返回数组中满足提供的测试函数的第一个元素的值。如果没有找到则返回undefined。

使用场景:当你需要从数组中查找第一个符合条件的元素时。

const users = [ { id: 1, name: 'Alice', age: 25 }, { id: 2, name: 'Bob', age: 30 }, { id: 3, name: 'Charlie', age: 35 }];// 查找第一个年龄大于30的用户const user = users.find(user => user.age > 30);console.log(user); // { id: 3, name: 'Charlie', age: 35 }// 查找不存在的用户const notFound = users.find(user => user.age > 40);console.log(notFound); // undefined

作用:返回数组中满足提供的测试函数的第一个元素的索引。若没有找到则返回-1。

使用场景:当你需要知道某个元素在数组中的位置时。

const numbers = [10, 20, 30, 40, 50];// 查找第一个大于25的元素的索引const index = numbers.findIndex(num => num > 25);console.log(index); // 2// 查找不存在的元素的索引const notFoundIndex = numbers.findIndex(num => num > 100);console.log(notFoundIndex); // -1

作用:创建一个新数组,包含通过所提供函数实现的测试的所有元素。

使用场景:当你需要从数组中筛选出符合条件的多个元素时。

const products = [ { id: 1, name: 'Laptop', price: 999, inStock: true }, { id: 2, name: 'Phone', price: 699, inStock: false }, { id: 3, name: 'Tablet', price: 499, inStock: true }];// 筛选有库存的产品const availableProducts = products.filter(product => product.inStock);console.log(availableProducts);// [// { id: 1, name: 'Laptop', price: 999, inStock: true },// { id: 3, name: 'Tablet', price: 499, inStock: true }// ]// 筛选价格低于500的产品const cheapProducts = products.filter(product => product.price < 500);console.log(cheapProducts);// [{ id: 3, name: 'Tablet', price: 499, inStock: true }]

作用:创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的返回值。

使用场景:当你需要对数组中的每个元素进行转换时。

const numbers = [1, 2, 3, 4];// 将每个数字平方const squares = numbers.map(num => num * num);console.log(squares); // [1, 4, 9, 16]// 从对象数组中提取特定属性const names = users.map(user => user.name);console.log(names); // ['Alice', 'Bob', 'Charlie']// 添加新属性const usersWithStatus = users.map(user => ({ ...user, status: user.age > 30 ? 'Senior' : 'Junior'}));console.log(usersWithStatus);// [// { id: 1, name: 'Alice', age: 25, status: 'Junior' },// { id: 2, name: 'Bob', age: 30, status: 'Junior' },// { id: 3, name: 'Charlie', age: 35, status: 'Senior' }// ]

作用:首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。相当于先map()再flat(1)。

使用场景:当你需要先映射然后扁平化结果时。

const sentences = ["Hello world", "Good morning", "Have a nice day"];// 将句子拆分为单词并扁平化const words = sentences.flatMap(sentence => sentence.split(' '));console.log(words);// ['Hello', 'world', 'Good', 'morning', 'Have', 'a', 'nice', 'day']// 传统方式需要先map再flatconst wordsOldWay = sentences.map(sentence => sentence.split(' ')).flat();console.log(wordsOldWay); // 同上// 处理嵌套数组const data = [[1], [2, 3], [4]];const flattened = data.flatMap(arr => arr.map(x => x * 2));console.log(flattened); // [2, 4, 6, 8]

作用:测试数组中是否至少有一个元素通过了提供的函数的测试。返回布尔值。

使用场景:当你需要检查数组中是否有元素满足某个条件时。

const numbers = [1, 2, 3, 4, 5];// 检查是否有偶数const hasEven = numbers.some(num => num % 2 === 0);console.log(hasEven); // true// 检查是否有大于10的数const hasLargeNumber = numbers.some(num => num > 10);console.log(hasLargeNumber); // false// 检查用户列表中是否有管理员const users = [ { id: 1, name: 'Alice', isAdmin: false }, { id: 2, name: 'Bob', isAdmin: true }, { id: 3, name: 'Charlie', isAdmin: false }];const hasAdmin = users.some(user => user.isAdmin);console.log(hasAdmin); // true

检查数组是否包含某个值,返回布尔值

返回元素在数组中的第一个/最后一个索引,找不到返回-1

检查是否所有元素都满足条件

合并两个或多个数组

返回数组的浅拷贝部分

修改数组内容(添加/删除元素)

将数组元素连接成字符串

对数组元素执行累加器函数

对数组元素进行排序(原地修改)

反转数组顺序(原地修改)

对每个数组元素执行函数

在数组末尾添加/删除元素

const arr = [1, 2];arr.push(3); // 返回新长度3,arr变为[1, 2, 3]arr.pop(); // 返回3,arr变回[1, 2]

在数组开头添加/删除元素

const arr = [1, 2];arr.unshift(0); // 返回新长度3,arr变为[0, 1, 2]arr.shift(); // 返回0,arr变回[1, 2]

将嵌套数组扁平化

用固定值填充数组

从类数组对象创建新数组

这些方法都遵循函数式编程的原则,不会修改原数组,而是返回新数组或值。它们可以链式调用,使得代码更加简洁和可读。

到此这篇关于JavaScript数组常用方法find、findIndex、filter、map、flatMap及some的文章就介绍到这了,更多相关JS数组常用方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


本文地址: https://www.earthnavs.com/jishuwz/b54eeb81a7df847f6276.html
全局中部横幅
WhatsApp筛号软件

跨境王WhatsApp筛号软件,可以按照不同国家号段生成电话号码,可以筛选这些号码是否开通WhatsApp,以及WhatsApp头像,并且可以根据头像识别性别、年龄

GitHub

Jointheworld'smostwidelyadopted,AI-powereddeveloperplatformwheremillionsofdevelopers,businesses,andthelargestopensourcecommunitybuildsoftwarethatadvanceshumanity.

清博智能

北京清博智能科技有限公司成立于2014年,先后拥有清博指数、清博舆情、新媒体管理平台、元娲虚拟人、先问大模型五大产品,并提供舆情分析报告、新媒体管理、虚拟人、大模型定制、品牌营销、元宇宙六大优质服务,通过将AI技术赋予感知、分析和决策的能力,从而为客户提供更智能、更高效、更优质的服务。

验证码

该站点未添加描述description...

斗鱼

斗鱼-每个人的直播平台提供高清、快捷、流畅的视频直播和游戏赛事直播服务,包含英雄联盟lol直播、穿越火线cf直播、dota2直播、美女直播等各类热门游戏赛事直播和各种名家大神游戏直播,内容丰富,推送及时,带给你不一样的视听体验,一切尽在斗鱼-每个人的直播平台。

530礼物网

530礼物网专注好礼物推荐与选购攻略,根据不同场景与对象,精心整理了各种生日礼物,结婚礼物,情人节礼物,圣诞节礼物,毕业礼物,让您挑选到适合的、令人满意的礼物。

翱联旅游网

翱联旅游网是您一站式的旅行专家,致力于为您打造无与伦比的旅游体验。在这里,您将开启一段精彩纷呈的探索之旅。我们拥有海量的旅游资源,涵盖全球热门目的地以及小众秘境,无论是浪漫的海滨度假、神秘的古老遗迹、壮丽的山川湖泊,还是充满异域风情的城市漫步,翱联旅游网都能满足您的多元需求。

云搜站导航

云搜站导航(yunsouzhan.cn)专注为职场人士提供高效办公解决方案,聚合PPT模板、Excel工具、在线协作平台、行政管理系统等实用资源,严选全网可商用、免版权素材,每日人工更新验证,网址大全,助力提升工作效率。即点即用,无广告干扰!

识酷吧导航

识库吧导航(shikuba.cn)提供高效便捷的网站分类导航服务,涵盖学术、工具、设计、娱乐等领域的优质站点。每日人工审核更新,助您快速发现实用资源,提升工作效率与学习体验。免费、无广告、一键直达!

导航站

导航站,站长导航,网址导航,网站导航,网站大全,网站目录,网站分类,分类目录,网站收录,自动收录,秒收录