常用的for 循环

ES5具有遍历数组功能的还有map、filter、some、every、reduce、reduceRight等,只不过他们的返回结果不一样

1、map():通过指定函数处理数组的每个元素,并返回处理后的数组。
注意:map不会改变原数组,map不会检查空数组

var num = [4, 9, 16, 25];
num.map(Math.sqrt)  // [2, 3, 4, 5]
console.log(num)  // [4, 9, 16, 25]

2、some():用于检测数组中的元素是否满足指定条件(函数提供)

  • 如果有一个元素满足条件,则表达式返回true ,剩余的元素不会再执行检测
  • 如果没有满足条件的元素,则返回false
  • unction形参和map一样
    some不会改变原数组,some不会检查空数组
var ages = [3, 10, 18, 20];
ages.some(function(age){ return age>10})  // true
console.log(ages) // [3, 10, 18, 20];

3、every:用于检测数组所有元素是否都符合指定条件(通过函数提供)

every和some正好相反:

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true。
var ages = [32, 33, 16, 40];

ages.every(checkAdult)  // false

 function checkAdult(age) {
    return age >= 18;
 }

4、filter:创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素

filter会根据函数中的筛选条件将返回的结果组成一个新的数组并返回

var ages = [32, 33, 16, 40];

function checkAdult(age) {
    return age >= 18;
}

function myFunction() {
    console.log(ages.filter(checkAdult));  // 32 33 40
}

5、forEach:

没有返回值,只针对每个元素调用func。
优点:代码简介。
缺点:无法使用break,return等终止循环。

let list = [1, 2, 3, 4, 5];
let other = [];
list.forEach((d, i) => {
    other.push(d * 2);
});
console.log(other);
// print: [2, 4, 6, 8, 10]

6、for... in 和for... of 的区别

1、使用for in会遍历数组所有的可枚举属性,包括原型
2、原型方法method和name属性,所以for in更适合遍历对象,不要使用for in遍历数组。for…in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
3、for…in遍历出的结果是key;for…of遍历出的结果是value

Array.prototype.method=function(){
  console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组"
for (var index in myArray) {
  console.log(myArray[index]);
}
// 1,2,3,4,5,6,7,'数组',function(){console.log(this.length);}

for in 可以遍历到myObject的原型方法method,如果不想遍历原型方法和属性的话,可以在循环内部判断一下,hasOwnPropery方法可以判断某属性是否是该对象的实例属性
只有属性存在实例中才会返回true

for (var key in myObject) {
  if(myObject.hasOwnProperty(key)){
    console.log(key);
  }
}

同样可以通过ES5的Object.keys(myObject)获取对象的实例属性组成的数组

如果要取得对象上所有可枚举的实例属性,可以使用Object.keys(), 返回字符串数组。

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
Object.keys(myObject)

//["a", "b", "c"]

4、for...of 不会遍历原型,输出value

Array.prototype.method=function(){
  console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组";
for (var value of myArray) {
  console.log(value);
}
// 1,2,3,4,5,6,7
  • for..of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象.与forEach()不同的是,它可以正确响应break、continue和return语句

  • for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法:

for (var key of Object.keys(someObject)) {
  console.log(key + ": " + someObject[key]);
}

for-of循环首先调用集合的Symbol.iterator方法,紧接着返回一个新的迭代器对象。迭代器对象可以是任意具有.next()方法的对象;for-of循环将重复调用这个方法,每次循环调用一次

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。