// 循环遍历
const arr1 = [1,2,5,4,6,8,99,88,52,624]
const obja = {a: 1,b: 2,c: 3}
const str = "stringThings"
/*
for 语句用于创建一个循环,它包含了三个可选的表达式,三个可选的表达式包围在圆括号中并由分号分隔,
后跟一个在循环中执行的语句
最原始的写法就是for循环
*/
for (var i = 0; i < arr1.length; i++) {
console.log("for",i,arr1[i])
}
/*
for...in 循环只遍历可枚举属性,。
像 Array和 Object使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype的不可枚举属性
for in遍历的是数组的索引(即键名)
*/
for(item in arr1){
console.log("for-in",item)
}
for(item in obja){
console.log("for-in",item)
}
/* for...of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)
上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句
*/
for(var item of arr1){
console.log("for-of",item)
}
for (var item of str){
console.log("string遍历for-of",item)
}
for (var key of Object.keys(obja)){
console.log("keys:",key,obja[key])
}
/*数组自带的foreach循环,使用频率较高,实际上性能比普通for循环弱
forEach循环,循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道数组长度
缺点:这种写法的问题在于,无法中途跳出forEach循环,break命令或return命令都不能奏效。
*/
arr1.forEach((value,index) => {
console.log("forEach",index,value)
})
// jQuery框架的each循环
$.each(arr1,function (i,v) {
console.log("$.each",i,v)
})
$.each(obja,function (i,v) {
console.log("$.each",i,v)
})
/*这种方式也是用的比较广泛的,虽然用起来比较优雅,但实际效率还比不上foreach
map函数,遍历数组每个元素,并回调操作,需要返回值,返回值组成新的数组,原数组不变,不能遍历对象
*/
arr1.map((item,index) => {
console.log("map",index,item)
})
// https://www.cnblogs.com/ihboy/p/6878427.html
var arr2 = ["2",66,88,true,"good","efefef","test"]
// 4. filter函数, 过滤通过条件的元素组成一个新数组, 原数组不变
var ff = arr1.filter(function (i) {
return i > 10
})
console.log("filter——",ff)
// 5. some函数,遍历数组中是否有符合条件的元素,返回Boolean值
var ss = arr2.some(function (i) {
return i === 'number'
})
console.log("some——",ss)
// 6. every函数, 遍历数组中是否每个元素都符合条件, 返回Boolean值
var ee = arr2.every(function (i) {
return i === 'number'
})
console.log("every——",ee)