Web前端之路让前端飞Web 前端开发

js中关于循环的那些API

2017-03-26  本文已影响723人  RichardBillion

数组循环

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

对象循环

ES6:for-of循环

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

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

咦,说好的能够终止循环的功能呢?

let words=["ruby","java","ruby","java"]
for(let word of words){
    if (word=='java') {
        break
    }
    console.log(word)
}
//ruby

嗯,是可以终止,可是如果我想要 index 呢?

for(let word of words.keys()){
    console.log(word)
}
// 0 1 2 3

那我想同时得到 index 和 value 呢?

for(let [index,word] of words.entries()){
    if (word=='java') {
        break
    }
    console.log(index,word)
}
//0 "ruby"

注意 let [index, word] of不能丢掉中括号。


说了这么多关于数组的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:

//手动迭代
function unfold(arr) {
    var result=[];
    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)
上一篇 下一篇

猜你喜欢

热点阅读