循环遍历总结(for/foreach/forin/forof/map/some/filter)

for-of 循环

  • 代码示例
for (var value of myArray) {
console.log(value);
}
  • 循环的对象需为一个数组
  • 没法记录索引
  • 能够相应break、continue、return语句
  • 可用来遍历对象属性
  • 可用来遍历对象的自值
  • 没法获取到对象或数组遍历的索引

for 循环

最基础的循环,循环内部可用到循环索引
- 代码示例php

for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}

foreach循环

myArray.forEach(function (value) {
console.log(value);
});
  • 没法使用break中断循环或用return返回到外层函数

for-in循环

for (var index in myArray) { 
console.log(myArray[index]);
}
  • 赋值给index的值不是实际的数字,是字符串’0’、’1’、’2’、’3’…..用于计算时可能出现未知的错误
  • for-in循环会遍历自定义属性
  • 在某些状况下,这段代码可能按照随机顺序遍历数组元素
  • 简而言之,for-in 是为普通对象设计的

map

arr.map(function(m,n,k){
    console.log(m); //val
    console.log(n); //index
    console.log(n); //arr
})
  • 函数中第一个参数为遍历某一项的值
  • 函数中第二个参数为遍历某一项的索引
  • 函数值后的参数指向数组自己

some

  • 用于检测数组中元素是否知足指定条件
  • 若是有一个元素知足就返回true,再也不检测
  • some() 不会对空数组进行检测。
  • some() 不会改变原始数组。
$scope.documents.some(function (item) {
    if (item._id === $scope.currentDocument._id) {
        $scope.currentDocument = item;
                                return true;
    } else {
        return false;
    }
});

filter

过滤数组中的元素,如下面的数组记录重复值为例web

function uniqSet(arr) {
    var seen = new Set();
    return arr.filter(function(el) {
        if(!seen.has(el)) {
            seen.add(el);
            return true;
        }
        return false;
    });
}
  • 以上代码中的参数el为数组每次遍历到的那个值
  • 使用return结束本次循环

EDN