js数组的正确用法

2023-11-14

     对于js中的数组,还在用for 循环遍历数组吗?数组的一些用法你用对了吗? 下面介绍一些数组的正确用法。

数组:

1. arr.indexOf() : 返回给定元素的下标  不存在则返回-1

 

2.arr.includes() :判断数组中是否包含某元素,返回boolean值, true/false

 

3.使用arr.find() 替代arr.filter()

   arr.find(callback): 参数为回调函数 查找数组中是否有某一元素 返回该元素item,找到后便不再往下找   不存在则返回undefined;

   arr.filter(callback): 参数为回调函数 过滤出符合条件的元素形成新数组 [item1,item2,...] , 不存在则返回空数组[];

    当需要查找的item 在数组中是唯一的时候,选择arr.find() 比arr.filter()性能更优,因为arr.find()会在找到该item时便不再往下找,而arr.filter()会将整个数组进行遍历。

 

 示例:

 const characters = [
     {id:1,name:'ironman',env:'marvel'},
     {id:2,name:'black_window',env:'marvel'},
     {id:3,name:'captain_america',env:'dc_comics'},
     {id:4,name:'captain_america',env:'dc_aomics'}
]

function getCharacter(name){
	 return character=>character.name===name;    // character代表数组的每一项item
}

let newArr1=characters.filter(getCharacter("captain_america")); 

console.log("newArr1",newArr1);   
/*
   [
     {id: 3, name: "captain_america", env: "dc_comics"},
     {id: 4, name: "captain_america", env: "dc_comics"}
   ]
*/

 let item=characters.find(getCharacter("captain_america"));
 console.log("item",item)     // { id: 3, name: 'captain_america'}

 

4.使用arr.some() 替代arr.find()

arr.some(callback):返回boolean值 true/false  相比arr.includes(值) (不考虑第二个可选参数)的可操控性更强

 当我们需要知道数组中是否存在一个元素时,使用arr.some(callback) 相比arr.find()更合适。

 示例:

 const characters = [
    {id:1,name:'ironman',env:'marvel'},
    {id:2,name:'black_window',env:'marvel'},
    {id:3,name:'captain_america',env:'dc_comics'},
    {id:4,name:'captain_america',env:'dc_aomics'}
]

function hasCharacterFrom(env){
    return character=>character.env===env;
}

//{id:1,name:'ironman',env:'marvel'}
console.log("find",characters.find(hasCharacterFrom('marvel')))  

console.log("some",characters.some(hasCharacterFrom('marvel')))  // true

 

5.使用arr.reduce 替代arr.filter与arr.map的组合 

arr.reduce()允许你将过滤后切加工过的项放进累计器中累计器可以是需要待递增的数字、待填充的对象、待拼接的字符串或数组等。

 const characters = [
	{id:1,name:'ironman',env:'marvel'},
	{id:2,name:'black_window',env:'marvel'},
	{id:3,name:'captain_america',env:'dc_comics'},
	{id:4,name:'captain_america',env:'dc_aomics'}
]

 /*
     [
	    {id:1,name:'ironman',env:'marvel',alsoSeenIn:['Avengers']},
		{id:2,name:'black_window',env:'marvel',alsoSeenIn:['Avengers']}
	 ]
*/
 console.log("filter+map的组合",
    characters
	.filter(character=>character.env==='marvel')
	.map( character=>Object.assign( {},character,{alsoSeenIn:['Avengers']} ) )
 )

// []:初始值  acc:代表每一次的累加值  character:item
console.log("reduce",
	characters.reduce((acc,character)=>{
		return character.env==='marvel'? acc.concat( 
               {...character,alsoSeenIn['Avengers']} ) : acc;
        },[])
)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js数组的正确用法 的相关文章

  • js倒计时

    html部分代码 div class time span 60 span span s span div js部分代码 var second document getElementById second var m 60 var time
  • 【每日一练】79—CSS实现扫描二维码动画

    二维码的应用越来越普通 加个好友 付个款 做个核酸 想去一个地方 还要扫个场所码 总之 需要二维码的地方越来越多 因此 在这样的大环境里 如何让你的码与众不同 引人注意 就显得非常重要 今天我们就来练习一个二维码的动画效果 具体效果如下 看
  • html中使用js实现体彩11选5随机选号

    体彩11选5随机选号 页面预览 代码实现
  • js制作简单的轮播图

    实现原理 首先定义一个div 设置width和height 然后在这个div里面再定义一个div2 该div的宽度为父div的宽度的n倍 其中n表示图片的张数 在这个div2里面放置需要进行轮播的所有图片 设置每张图片的宽度为一个最外层父类
  • 组织关系图谱

    div style width 100 height 800px div
  • $emit传递参数

    emit传递一个参数时 子组件代码 let data name 王五 age 50 this emit change data 父组件代码
  • JavaScript动态生成表格

    源代码
  • postMan使用技巧

    使用postMan调试接口 一些接口要实现登录才能访问 即要还token才能访问 一般登录后 拿到token才复制到其他接口下添加token变量 如些复制感觉是挺麻烦的 这时我们可以设置postman的全局变量 操作如下 添加调试环境和全局
  • live-server的使用

    本地开发常常需要搭建临时的服务 第一时间我们会想到用http server 但现在流行修改文件浏览器自动刷新hot socketing 热拔插 如live reload 若想浏览器自动打开项目 用opener 现在live server实现
  • Umi+Dva初印象<基础应用,结构,流转逻辑>

    目录 前言 知识储备 generator函数 Dva初识 实际交互 函数式组件 class组件 前言 项目初始为umi脚手架进行初始化 lt 初始化过程 http t csdn cn cuTaY gt 工程中加载了umi自带的antd ui
  • Eclipse 安装阿里巴巴代码规范插件的步骤

    2017年10月14日杭州云栖大会 Java代码规约扫描插件全球首发仪式正式启动 规范正式以插件形式公开走向业界 引领Java语言的规范之路 目前 插件已在云效公有云产品中集成 立即体验 云效 gt 公有云 gt 设置 gt 测试服务 gt
  • 网页是如何显示在浏览器

    这两天学习了一些网页如何在浏览器中显示的知识 感觉在我向前端走的路上非常有用 所以就在这里总结一下 大家可以看看 我也算是巩固一下知识 因为自己学识太浅 内容可能有一些错误之处 希望看到的朋友可以指出来啦 在Edge浏览器也加入Chromi
  • 通过点击按钮在页面添加图片

    点击添加按钮 在盒子中加入图片 点击图片实现删除图片效果 代码如下
  • JavaScript every() 方法:提示、技巧和用例

    JavaScript 巩固了其作为世界上最流行和最广泛使用的编程语言之一的地位 这是有充分理由的 它的动态特性和多功能性使其成为 Web 开发 从客户端交互到服务器端编程 的首选 提高其效率的一个重要因素是内置方法的多样性 其中一种有用的方
  • JavaScript 分支结构语句

    JavaScript 分支结构语句 1 if语句 2 if else语句 双分支语句 3 if else if 语句 多分支语句 4 三元表达式 5 switch语句 语句 也称为流控制语句 通常使用一或多个关键字完成既定的任务 语句可以简
  • 6.js--布尔值和null

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 目录 1 布尔数据 boolean 2 null 3 null和undefined的意义 1 布尔数据 boolean var a true var b false
  • 节流与防抖

    1 我们先了解为什么要节流和防抖 我们给一个inpu输入框绑定一个oninput事件 此时我们输入 前端开发 四个字 我们 观察以下后台打印
  • WPF 路径动画PathAnimations的使用

    在wpf中让一个控件按照一定的路径运行的动画 叫做路径动画 这个示例演示了让一个rectangle按照一个s形曲线反复运行的动画 效果 只有一个文件 全部代码如下
  • CocosCreator列表scrollview滑动速度的修改,鼠标滚动速度修改

    由于cocos creator 在pc端 使用scrollview 鼠标滚动速度太慢 原文地址 CocosCreator列表滑动速度的修改 简书CocosCreator列表滑动速度的修改 简书引擎版本 2 2 2 之后升级的2 4 0直接可
  • 30天精通Nodejs--第十四天:MongoDB

    这里写目录标题 前言 什么是 MongoDB 安装 MongoDB 驱动 连接到 MongoDB 数据库 执行基本操作 插入文档 查询文档 更新文档 删除文档

随机推荐