循环数组的多种方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>数组多种方法</title>
</head>
<body>
</body>
<script>
// 数组的循环
// 原来 for while
// es5 forEach() map() filter() some() every() reduce() reduceRight()
// forEach(fun(),this指向) 也可以直接用bind绑定this指向 如果是用箭头函数的写法 没办法改变this的指向的
let arr = [1, 2, 3, 4, 5];
// 1.forEach():代替普通的for循环
// arr.forEach(function(val,index,arr){
// console.log(val,index,arr)
// }.bind(123))
// 2. map():非常有用 数据交互的时候
// arr.map(function(val,index,arr){
// console.log(val,index,arr)
// })
//3.filter()
// arr.filter(function(val,index,arr){
// console.log(val,index,arr)
// })
// arr.some(function (val, index, arr) {
// console.log(val, index, arr)
// })
</script>
<script>
// map 正常情况下需要配合return 返回一个新数组 若是没有return,相当于forEach
//平时只要是用map,最好是有return,可以重新整理数据
{
let arr = [{
title: '新闻1',
count: 100,
hot: true
},
{
title: '新闻2',
count: 100,
hot: true
},
{
title: '新闻3',
count: 100,
hot: true
},
{
title: '新闻4',
count: 100,
hot: true
}
]
let newarr = arr.map(function (val, index, arr) {
let json = {};
json.title = val.title;
json.count = val.count;
json.hot = val.hot ? '最热' : '普通'
return json;
})
console.log(newarr)
//返回的值
// 0:{title: "新闻1", count: 100, hot: "最热"}
// 1: {title: "新闻2", count: 100, hot: "最热"}
// 2: {title: "新闻3", count: 100, hot: "最热"}
// 3: {title: "新闻4", count: 100, hot: "最热"}
}
</script>
<script>
// filter 过滤 过滤一些不合格的数据
{
let arr = [{
title: '新闻1',
count: 100,
hot: true
},
{
title: '新闻2',
count: 100,
hot: false
},
{
title: '新闻3',
count: 100,
hot: false
},
{
title: '新闻4',
count: 100,
hot: true
}
]
//过滤掉不是热门的新闻
let newarr = arr.filter(function (val, index, arr) {
return val.hot == true;
})
console.log(newarr) //返回的事hot为true的数据
}
</script>
<script>
// some 类似查找 只有某一个元素符合条件,返回true
{
let arr = [{
title: '新闻1',
count: 100,
hot: true
},
{
title: '新闻2',
count: 100,
hot: false
},
{
title: '新闻3',
count: 100,
hot: false
},
{
title: '新闻4',
count: 100,
hot: true
}
]
//过滤掉不是热门的新闻
let newarr = arr.some(function (val, index, arr) {
return val.title == '新闻1';
})
console.log(newarr) //true
}
</script>
<script>
// every 数组里的所有元素都要符合条件才返回true
{
let arr = [1, 3, 5, 7, 9];
//判断这个数组是不是都是奇数
let newarr = arr.every(function (val, index, arr) {
return val % 2 == 1;
})
console.log(newarr) //true
}
</script>
<script>
// reduce(fun(前一个,当前,下标,所在数组))
{
let arr = [1, 2, 3, 4, 5];
// 利用他来求数组的和
let sum = arr.reduce(function (prev, cur, index, arr) {
return cur + prev;
})
console.log(sum) //15
// 利用他来求阶乘
let jc = arr.reduce(function (prev, cur, index, arr) {
return prev * cur;
})
console.log(jc) //120
}
</script>
<script>
// reduceRight() 从右往左
{
let arr = [1, 2, 3, 4, 5];
// 利用他来求数组的和
let sum = arr.reduceRight(function (prev, cur, index, arr) {
return cur + prev;
})
console.log(sum) //15
}
</script>
<script>
// for-of遍历
// 新增 arr.keys()某项的下标 arr.entries()某项的值
{
let arr = [1, 2, 3, 4, 5];
for (var value of arr) {
console.log(value);
}
for (var index of arr.keys()) {
console.log(index);
}
for (var item of arr.entries()) {
console.log(item);
}
for (var [key, val] of arr.entries()) {
console.log(key, val);
}
}
</script>
</html>