深入了解JavaScript 中的For循环之详解

苏南South 2020-11-13 12:45:16
javascript 循环 深入 了解 入了


JavaScript 循环. 如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。 我们可以这样输出数组的值,循环提供了一种快速和简单的方式去做一些重复的事。JavaScript入门的这个章节会介绍在JavaScript中存在哪些不同的迭代语句,常用的循环遍历方法for()循环forEachmap()for..infor..ofjquery:$.each()forEach() & map()forEach(),map()是es5新增的循环遍历方法。JS之经典for循环闭包问题解决方法

前言:

​ 今天我想分享一个有关于循环筛选的知识点,也许是前端小白的你首先想到的是用for循环做筛选,但我这种小菜鸟想到的就是map(工作中很喜欢用= =),学过数据结构的小伙伴也肯定知道,线性表这些跟循环也息息相关,包括你出去面试的时候或许你遇到过这样的问题,map和forEach的区别?去重的几种方式?说实话,forEach我真的很少用,但不满足于现状的我,觉得应该多学习几种。我是前端挖坑妹,准备好了么?一起粗发~

正文:

​ 在代码示例中我会用到es6中的语言,如果你还不是很了解,你可以看看阮老师的es6.(= =我也是一点一点跟着看的。)

1.map

​ 先说一下最常用的map.利用map方便获得对象数组中的特定属性值们.它返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

//将a02品牌的标价全部加100
const clothesArr=[
{
username:"sunan",haveA02:false,basePrice:30},
{
username:"fenshuajiang",haveA02:true,basePrice:10},
{
username:"huixin",haveA02:true,basePrice:20}
]//苏南的专栏 交流:912594095、公众号:honeyBadger8
clothesArr.map(
item=>item.haveA02?{
...item,basePrice:item.basePrice+100:item}
)
  • map() 不会对空数组进行检测。

  • map() 不会改变原始数组。

2.filter

​ filter和map相比,它也接受一个函数,并把接受的函数依次作用于每个元素,返回值为true和false,true留下,false扔掉!看看例子~

const filterArr = [1,2,3,4,5,6,7,8,9,10];//这里我只想要3的倍数
const newArr = filterArr.filter((x) => x % 3 == 0);
console.log(newArr);//(3) [3, 6, 9]

这里需要注意:

  • filter() 不会对空数组进行检测。

  • filter() 不会改变原始数组,所以你需要赋值到新数组上。

3.forEach

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第二个参数是对应的数组索引,第三个参数是数组本身,数组中有几项,那么传递进去的匿名回调函数就需要执行几次.

const forEachArr=[1,2,3,4,5];//计算所有数组的和
var sum=0;
forEachArr.forEach((value,index,array)=>{

sum+=value;
});//苏南的专栏 交流:912594095、公众号:honeyBadger8
console.log(sum);//15

这里需要注意:

  • forEach() 对于空数组是不会执行回调函数的。
4.for in

以前觉得这个不常用,但现在真的很感谢有这个函数,因为最近项目中解决了很多问题,尤其是对象拿value值的时候,先来说说对数组的时候怎么用。

const forInArr=[1,2,3,4,5]
for(let index in forInArr){

console.log(index,forInArr[index]);
}
//0 1
//1 2
//2 3
//3 4
//4 5

用for in不仅可以对数组便利,也可以对enumerable(可枚举)对象操作

const forInObj={

'111':{
name:'huixin',size:'m'},
'222':{
name:'sunan',size:'l'},
'333':{
name:'fenshuajiang',size:'s'}
};//这个时候我只想取到value值传给后端,key值不要。
for(let index in forInObj){

console.log(index,forInObj[index]);
}
//111 {name: "huixin", size: "m"}
//222 {name: "sunan", size: "l"}
//333 {name: "fenshuajiang", size: "s"}

在这里插播一个问题:给你一个对象,去掉里面属性值为null、""或者undefined的属性

let objs={

a:false,
b:null,
c:undefined,
d:''
}
const dataType=(obj)=>{

if (obj===null) return "Null";
if (obj===undefined) return "Undefined";
return Object.prototype.toString.call(obj).slice(8,-1);
};
const filtrateValue=(obj)=>{

var param = {
};
if ( obj === null || obj === undefined || obj === "" ) return param;
for ( var key in obj ){

if ( dataType(obj[key]) === "Object" ){

param[key] = filtrateValue(obj[key]);
}else if( obj[key] !== null && obj[key] !== undefined && obj[key] !== "" ){
//苏南的专栏 交流:912594095、公众号:honeyBadger8
param[key] = obj[key];
}
}
return param;
};
filtrateValue(objs);
//{a: false}
5.for of

在es6 中新增了一个 for of 循环,这个还没怎么用过,以后要多用才能记得住,看看例子~

const forOfArr='huixin';
for(let value of forOfArr) {

console.log(value);
};
//h
//u
//i
//x
//i
//n

for in总是得到对像的key或数组,字符串的下标,而for of和forEach一样,是直接得到值

注意:for of不能对对象用

6.set

Set类似于数组,但是成员的值都是唯一的,没有重复的值,也没有索引。用set.size表示伪数组长度

var setArr= [7, 7, 7, 8, 8, 8, 82, 82, 839, 49, 329, 8, 3, 3];//数组去重
var set = new Set(setArr);
var newArr = new Array(...set);
console.log(newArr);//(7) [7, 8, 82, 839, 49, 329, 3]
7.some

这个函数,我觉得只是检测数组中是否有某个元素,符合条件,符合返回true。如果没有满足条件的元素,则返回false。感觉有点像|字符。

var someArr = [2, 13, 18, 20];//检测是否有人小于18岁
let outcome=someArr.some( (age)=>{
 return age<18})
console.log(outcome);//true

注意: some() 不会对空数组进行检测。

注意: some() 不会改变原始数组。

8.every

这个函数,检测数组中是否有某个元素,不符合条件,有一个为false,则返回false。如果都满足条件的元素,则返回true。感觉有点像&字符。

var someArr = [2, 13, 18, 20];//检测是否都是未成年
let outcome=someArr.every((age)=>{
 return age<18})
console.log(outcome);//false

注意: every() 不会对空数组进行检测。

注意: every() 不会改变原始数组。

9.reduce

​ 最后一个,reduce,刚接触前端的时候,我也不明白,现在到是知道那么一丢丢了。这个方法有点不同,4个参数。接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

​ prev:它是上一次调用回调时返回的结果,每次调用的结果都会给prev

​ cur:当前的元素

​ index:当前的索引

​ arr:循环的数组

var reduceArr = [1,2,3,4,5]//求和
var str = reduceArr.reduce((prev,cur,index,arr)=>{

return prev + cur ;//苏南的专栏 交流:912594095、公众号:honeyBadger8
})
console.log(str);//15

10.Object.keys(obj)

朋友小机灵又帮我添加了一个,可以遍历对象

const forInObj={

'111':{
name:'huixin',size:'m'},
'222':{
name:'sunan',size:'l'},
'333':{
name:'fenshuajiang',size:'s'}
};//苏南的专栏 交流:912594095、公众号:honeyBadger8
Object.keys(forInObj).map(item=>console.log(item,forInObj[item]));
//111 {name: "huixin", size: "m"}
//222 {name: "sunan", size: "l"}
//333 {name: "fenshuajiang", size: "s"}

总结

学了这么多,不一定强制我在工作中一定要用到,玩的顺手就好,毕竟每天进步一点点,心里才踏实,哈哈。我是前端挖坑妹,一个每天给自己挖坑的妹子,下次见哈~

IT平头哥联盟主要分享前端、测试 等领域的积累(前端开发、HTML、CSS/CSS3、新手上路、javascript、js、自动化、性能、接口系列),苏南,首席填坑官,平头哥,蜜獾,个人博客——宝剑锋从磨砺出 梅花香自苦寒来,曾想仗剑走天涯 后来BUG太多就没去了,苏南的专栏

其他

作者:前端挖坑妹

链接:http://susouth.com/

交流:912594095、公众号:honeyBadger8

本文原创,著作权归作者所有。商业转载请联系@IT·平头哥联盟获得授权,非商业转载请注明原链接及出处。

版权声明
本文为[苏南South]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43254766/article/details/85320426

  1. [front end -- JavaScript] knowledge point (IV) -- memory leakage in the project (I)
  2. This mechanism in JS
  3. Vue 3.0 source code learning 1 --- rendering process of components
  4. Learning the realization of canvas and simple drawing
  5. gin里获取http请求过来的参数
  6. vue3的新特性
  7. Get the parameters from HTTP request in gin
  8. New features of vue3
  9. vue-cli 引入腾讯地图(最新 api,rocketmq原理面试
  10. Vue 学习笔记(3,免费Java高级工程师学习资源
  11. Vue 学习笔记(2,Java编程视频教程
  12. Vue cli introduces Tencent maps (the latest API, rocketmq)
  13. Vue learning notes (3, free Java senior engineer learning resources)
  14. Vue learning notes (2, Java programming video tutorial)
  15. 【Vue】—props属性
  16. 【Vue】—创建组件
  17. [Vue] - props attribute
  18. [Vue] - create component
  19. 浅谈vue响应式原理及发布订阅模式和观察者模式
  20. On Vue responsive principle, publish subscribe mode and observer mode
  21. 浅谈vue响应式原理及发布订阅模式和观察者模式
  22. On Vue responsive principle, publish subscribe mode and observer mode
  23. Xiaobai can understand it. It only takes 4 steps to solve the problem of Vue keep alive cache component
  24. Publish, subscribe and observer of design patterns
  25. Summary of common content added in ES6 + (II)
  26. No.8 Vue element admin learning (III) vuex learning and login method analysis
  27. Write a mini webpack project construction tool
  28. Shopping cart (front-end static page preparation)
  29. Introduction to the fluent platform
  30. Webpack5 cache
  31. The difference between drop-down box select option and datalist
  32. CSS review (III)
  33. Node.js学习笔记【七】
  34. Node.js learning notes [VII]
  35. Vue Router根据后台数据加载不同的组件(思考-&gt;实现-&gt;不止于实现)
  36. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  37. 【JQuery框架,Java编程教程视频下载
  38. [jQuery framework, Java programming tutorial video download
  39. Vue Router根据后台数据加载不同的组件(思考-&gt;实现-&gt;不止于实现)
  40. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  41. 【Vue,阿里P8大佬亲自教你
  42. 【Vue基础知识总结 5,字节跳动算法工程师面试经验
  43. [Vue, Ali P8 teaches you personally
  44. [Vue basic knowledge summary 5. Interview experience of byte beating Algorithm Engineer
  45. 【问题记录】- 谷歌浏览器 Html生成PDF
  46. [problem record] - PDF generated by Google browser HTML
  47. 【问题记录】- 谷歌浏览器 Html生成PDF
  48. [problem record] - PDF generated by Google browser HTML
  49. 【JavaScript】查漏补缺 —数组中reduce()方法
  50. [JavaScript] leak checking and defect filling - reduce() method in array
  51. 【重识 HTML (3),350道Java面试真题分享
  52. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  53. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  54. [re recognize HTML (3) and share 350 real Java interview questions
  55. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  56. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  57. 【重识 HTML ,nginx面试题阿里
  58. 【重识 HTML (4),ELK原来这么简单
  59. [re recognize HTML, nginx interview questions]
  60. [re recognize HTML (4). Elk is so simple