ITPub博客

首页 > 应用开发 > > 前端开发中:javascript循环的那些API

前端开发中:javascript循环的那些API

作者:u_151d1ef45539 时间:2019-09-18 14:44:45 0 删除 编辑

数组循环

针对数组,for循环完全OK,此处略过不表,只说一说为方便我们开发而那些内置的方法:

forEach

就是for循环的简化,将每个值取出去做我们想做的事儿

var arr=[1,2,3,4];

arr.forEach(function(value,index){

console.log(index+':'+value+'\\n')

})

缺点是不能中断循环,没有break/continue方法。

当然有时也可以使用some或者every方法在条件符合时退出循环,其使用方法和forEach无异,但他们常被用来确定数组的所有成员是否满足指定的测试。

//some 方法在return值为true时终止遍历

var arr=["java","lua","go","ruby"];

arr.some(function(value,index){

console.log(index+" : "+value)

return value==="go"

}) //打印结果

//0 : java

//1 : lua

//2 : go

//true

//every方法是当return返回值为false时退出循环

arr.every(function(value,index){

console.log(index+" : "+value)

return value.length>3

}) //打印结果

//0 : java

//1 : lua

//false

map

对数组每个元素调用通用的映射方法。

(对于下面的纯函数,我们就使用箭头函数了)

let arr=[1,3,5,7]

let newArr=arr.map(x=>0.5*x+3)

filter

返回符合要求的元素

//取出数组中大于10的数

let arr=[1,5,17,23,9,12,10]

let newArr=arr.filter(ele=>ele>10) //print result:

//newArr=[17,23,12]

reduce方法

reduce()接受一个方法作为回调,是一个数组逐项处理方法

arr.reduce(callback[previousValue,currentValue],initialValue)

其中initialValue作为第一次调用时传给previousValue的值

previousValue 为上一次callback的返回值,所以适用于递归

let arr=[1,2,3,4]

let sum=arr.reduce((pre,cur)=>pre+cur )

//10

let multiplicative=arr.reduce((pre,cur)=>pre*cur) //24

let max=arr.reduce((pre,cur)=>pre>cur?pre:cur) //4

对象循环

for - in

for - in 是专门用来循环带有字符串key的可枚举对象的方法

let obj = {a:1, b:2, c:3};

for(let key in obj){

console.log(key+" : "+obj[key])

}

//a : 1

//b : 2

//c : 3

ES6:for-of循环

这是ES6新提出的循环方法,可以用来循环除了适用于for-in的可枚举对象之外的任何东西。

数组

let arr=["java","lua","go","ruby"];

for(let ele of arr){

console.log(ele)

}

字符串

let str="minelab"

for(let char of str){

console.log(char)

}

Map

let myMap = new Map([["a", 1], ["b", 2], ["c", 3]])

for(let [key,value] of myMap){

console.log(key+" : "+value)

}

//a : 1

//b : 2

//c : 3

Set

words=["ruby","java","ruby","java"]

let uniqueWords=new Set(words)

for(let word of uniqueWords){

console.log(word)

}

//ruby

//java

还有Dom Collection这样的类数组、生成器等等。

说了这么多关于数组的API,就再写个常见的应用案例吧

扁平化多维数组

//题目意思是有var arr= [1,3,4,5,[6,[0,1,5],9],[2,5,[1,5]],[5]];

//使其成为[1, 3, 4, 5, 6, 0, 1, 5, 9, 2, 5, 1, 5, 5]

方法1:

//手动迭代var result=[];function unfold(arr) {

arr.forEach(function(item){

if (Array.isArray(item)) {

unfold(item)

}else{

result.push(item)

}

})

return result

}

unfold(arr);

方法2:

//使用reduce方法实现递归

const flatten=arr=>arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?flatten(cur):cur),[])

//reduce 方法中给了初始值一个空数组,是为了能顺利执行concat方法let result=flatten(arr)

方法3:

/使用toString,转化为字符串,然后可以直接使用split分割成扁平的字符串数组,最后再转化为整形数组

result=arr.toString().split(',').map(data=>+data)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69927053/viewspace-3145880/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 10个JavaScript难点
请登录后发表评论 登录
全部评论

注册时间:2019-07-31

  • 博文量
    155
  • 访问量
    256