[JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)

news/2024/11/17 20:34:52/

课程来源:后盾人
上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟
数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一个新的数组,解构赋值,多种添加元素的方式,在数组中增删改,小函数:移动数组里的一部分,清空数组的方式,split和join的使用,find和findIndex的使用,自定义find函数,神奇的排序。

数组的循环操作

  • 首先我们定义一个数组,命名为lessons
let lessons = [{ name: 'js基础', catagory: 'js' },{ name: 'flex弹性盒子模型', catagory: 'css' },{ name: 'html基础', catagory: 'html' },{ name: '数据库查询', catagory: 'mysql' },{ name: 'C语言YYDS', catagory: 'c' },
]
  1. 普通的for循环
for (let i = 0; i < lessons.length; i++) {lessons[i].name = `Dust喜欢的${lessons[i].name}`
}
console.log(lessons)

运行结果:
在这里插入图片描述
2. for-in循环

for (let key in lessons) {lessons[key].name = `Dust喜欢的${lessons[key].name}`
}

在这里插入图片描述
3. for-of循环

  • 注意这里传值和传址的区别,传值的时候改变不了原数组的。
let arr = [1, 2, 3, 4, 5]
for (let value of arr) {//开辟一个新的内存空间赋值给它value += 10//此时arr表示:关我什么事?这种方法是改变不了原数组的。
}
console.log(arr) //[ 1, 2, 3, 4, 5 ]let a = [{ n: 1 }, { n: 2 }]
for (let value of a) {value.n += 10//这次是引用类型,所以可以改变到里面的内容。//这次在let的时候不是开辟一个新的空间,而是直接拿来它的地址用。
}
console.log(a) //[ { n: 11 }, { n: 12 } ]

运行结果:
在这里插入图片描述

  1. forEach循环

forEach还可以直接操作dom元素

lessons.forEach(function (item, index, lessons) {item.title = item.name.substr(0, 2)
})
console.log(lessons)

运行结果:
在这里插入图片描述

迭代器

  • 首先来看看next里都有些啥?
let arr = ['dust1', 'dust2', 'hahaha']
let values = arr.values()
console.log(values.next())
  • 运行结果:
    在这里插入图片描述

  • 看懂了吗?明白了next()里都有些啥了不?

  • 来看看迭代器是怎么写的了把~

let arr = ['dust1', 'dust2', 'hahaha']
let values = arr.values()
while (({ value, done } = values.next()) && done === false) {console.log(value)
}
  • 运行结果:
    在这里插入图片描述

every和some的使用

  • every:一旦有就不行
let user = [{ name: '李四', js: 89 },{ name: '张三', js: 99 },{ name: '马六', js: 55 },
]
let res = user.every(function (item) {return item.js >= 60
})
console.log(res ? '全都及格' : '有人不及格') //有人不及格
  • some:有一个就行
let arr = ['dust1', 'dust2', 'hahaha']
let res1 = arr.some(function (value, index, arr) {console.log(value)//有一个为真就行return true
})
console.log(res1) //dust1 true
  • some配合DOM的实战
  • test.html
  • 达到效果:如果不输入指定的关键字就有提示消息
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><input type="text" name="title" /><span></span><script defer>let keywords = ['js', 'php']let title = document.querySelector('[name="title"]')title.addEventListener('keyup', function () {const res = keywords.some((keyword) => {return this.value.indexOf(keyword) != -1})if (res == false) {document.querySelector('span').innerHTML = '必须包含' + keywords.join(',') + '关键词'} else {document.querySelector('span').innerHTML = ''}})</script></body>
</html>

运行结果:
在这里插入图片描述

在这里插入图片描述


filter过滤器的使用

let lessons = [{ name: 'js基础', catagory: 'js' },{ name: 'flex弹性盒子模型', catagory: 'css' },{ name: 'html基础', catagory: 'html' },{ name: '数据库查询', catagory: 'mysql' },{ name: 'C语言YYDS', catagory: 'c' },{ name: '响应式媒体查询', catagory: 'css' },
]
const cssLessons = lessons.filter(function (lesson) {return lesson['catagory'] == 'css'
})
console.log(cssLessons)

在这里插入图片描述


map的使用

  • map是一个值类型,相当于一个复印机,不会改变原来的值。
let lessons = [{ name: 'js基础', catagory: 'js' },{ name: 'flex弹性盒子模型', catagory: 'css' },{ name: 'html基础', catagory: 'html' },{ name: '数据库查询', catagory: 'mysql' },{ name: 'C语言YYDS', catagory: 'c' },{ name: '响应式媒体查询', catagory: 'css' },
]const myLessons = lessons.map((item) => {return (item.name = `Dust喜欢的${item.name}`)
})
console.log(myLessons)

运行结果:
在这里插入图片描述


神奇的reduce

  • reduce是一个神奇的迭代方法,每次都会把上一次的返回值传给下一次,理解一下什么叫递归很重要。
  • 首先通过一个输出来感受一下这个语法:
let arr = [1, 2, 3, 4, 5]
arr.reduce((pre, value, index, array) => {console.log(pre, value)return 99
})

在这里插入图片描述

接下来介绍两个有点绕的reduce示例

统计一个数组中某个数出现的次数。
  • 比如这里统计1在a数组中出现的次数。
  • 老师的简写写法简直让人叹为观止啊!
let arr = [1, 2, 3, 4, 5, 1, 2, 3, 1]
function arrayCount(array, item) {return array.reduce((total, cur) => {total += item == cur ? 1 : 0return total}, 0)
}
console.log(arrayCount(arr, 1))

在这里插入图片描述

输出数组中的最大值
function arrayMax(array) {return array.reduce((pre, cur) => {return pre > cur ? pre : cur})
}
console.log(arrayMax(arr)) //5

在这里插入图片描述


http://www.ppmy.cn/news/607492.html

相关文章

pytorch记录:seq2seq例子看看这torch怎么玩的

https://blog.csdn.net/nockinonheavensdoor/article/details/82320580 先看看简单例子&#xff1a; import torch import torch.autograd as autograd import torch.nn as nn import torch.nn.functional as F import torch.optim as optim torch.manual_seed(1) 1234567用tor…

ajax发送动态字符传,如何发送ajax请求文件与其他字符串的变量?

我想创建ajax调用并发送数据与文件和其他变量&#xff0c;我也使用django&#xff0c;如果它的帮助。如何发送ajax请求文件与其他字符串的变量&#xff1f;我尝试&#xff1a;js文件&#xff1a;$("#save-new-request-testBtn").click(function(){var project $(#pr…

云原生(三十四) | Kubernetes篇之平台存储系统实战

文章目录 Kubernetes平台存储系统实战 一、块存储(RDB) 1、配置 二、STS案例实战 三、文件存储(CephFS) 1、配置 2、测试 四、pvc扩容 动态卷扩容 Kubernetes平台存储系统实战 一、块存储(RDB) RDB&#xff1a; RADOS Block Devices RADOS&#xff1a; Reliable, A…

地平线 征程® 3

地平线 征程 3 新一代高性能车规级 AI 芯片 征程3 是地平线基于自研的BPU2.0 架构&#xff0c;针对高级别辅助驾驶场景推出的新一代高效能车规级 AI 芯片&#xff0c;已通过 AEC-Q100 认证。征程3 不仅支持基于深度学习的图像检测、分类、像素级分割等功能&#xff1b;也支持对…

大数据必学Java基础(二十九):二维数组

文章目录 二维数组 一、引入:本质上全部都是一维数组 二、基本代码

iphone smtp服务器没有响应,电子邮件卡在iPhone或iPad上的发件箱?如何修复iOS中的未发送邮件 | MOS86...

您曾经在iOS中发送电子邮件&#xff0c;只能将信息卡在iPhone&#xff0c;iPad或iPod touch的邮件应用发件箱中&#xff1f;你知道这是什么时候发生的&#xff0c;因为在iOS的Mail应用程序的底部&#xff0c;状态栏在iOS中显示1个未发送的消息&#xff0c;或者甚至更多的未发送…

工艺技术:14nm与28nm工艺

工艺技术&#xff1a;14nm与28nm工艺 中芯国际&#xff0c;用成熟可靠的工艺技术实现日趋精细复杂的芯片设计&#xff0c;从而让产品在具备更高性能和更低功耗的同时&#xff0c;实现芯片尺寸的优化。 为了满足全球客户的不同需求&#xff0c;提供0.35微米到14纳米制程工艺设计…

神经机器翻译(NMT)开源工具

博客地址&#xff1a;http://blog.csdn.net/wangxinginnlp/article/details/52944432 工具名称&#xff1a;T2T: Tensor2Tensor Transformers 地址&#xff1a;https://github.com/tensorflow/tensor2tensor 语言&#xff1a;Python/Tensorflow 简介&#xff1a;★★★★★ 五颗…