- some
- every
- filter
- map
- forEach 不能被return或break终止循环
- reduce 累加器
1、some
语法:数组.some(function(item){return 判断表达式
})
函数有返回值返回一个booleean值,当数组中有一个满足条件的就返回true 若一个没有则返回false,可以用一个变量来接收返回值
演示
var arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
var flag = arr.some(function(item) {
return item > 10;
})
console.log(flag); //flag==true
var flag1 = arr.some(function(item) {
return item > 100;
})
console.log(flag1);//flag=false
es6语法
let arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
let flag = arr.some(item=>item>0)
console.log(flag); //flag==true
let flag1 = arr.some(item=>item > 10)
console.log(flag1);//flag=false
实例
//问:是否有不及格的?
var scores=[60,23,4,90,99]
var rst=scores.some(function (value, index) {
return value < 60
})
console.log(rst);
2、every
语法:数组.every(function(item){return 判断表达式
})
函数有返回值返回一个booleean值,当数组中每一个都满足条件的就返回true 若有一个不满足则返回false,可以用一个变量来接收返回值。
演示
var arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
var flag = arr.every(function(item) {
return item>0;
})
console.log(flag); //flag==true
var flag1 = arr.every(function(item) {
return item > 10;
})
console.log(flag1);//flag=false
es6语法
let arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
let flag = arr.every(item=>item>0)
console.log(flag); //flag==true
let flag1 = arr.every (item=>item > 10)
console.log(flag1);//flag=false
实例
问:是否都及格了?
var scores=[60,23,4,90,99]
var rst=scores.every(function(item){
return item>=60 //假
})
3、filter
语法:数组.filter(function(item){return 判断表达式
})
函数有返回值返回一个新数组, 过滤 筛选所有满足条件的数据,组成新数组 返回一个新数组,可以定义一个新数组来接收
演示
var arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
var arr0 = arr.filter(function(item) {
return item > 10;
})
console.log(arr0); //arr0=[21, 21, 412]
es6语法
let arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
let arr0 = arr.filter(item => item > 10)
console.log(arr0); //arr0=[21, 21, 412]
实例
//筛选出大于60的数据
var arr0=arr.filter(function (item, index) {
console.log(item,index);
return item >= 60
})
console.log(arr0);
4、map
map 对原数组数据进行处理之后,返回新数组,可以用一个新数组接收,、
主要用途:可以处理一些需要统一改变的数据,新增属性,删除属性,修改数据等。
语法:数组.map(function(item){
return item+5;})
演示
var arr = [1, 1, 3, 3, 21, 4, 1, 2, 5, 23, 25]
var arr1 = arr.map(function(item) {
return item + 5;
})
console.log(arr1); //arr1=[6, 6, 8, 8, 26, 9, 6, 7, 10, 28, 30]
es6语法
let arr = [1, 1, 3, 3, 21, 4, 1, 2, 5, 23, 25];
let arr1 = arr.map(item => item + 5);
console.log(arr1); //arr1=[6, 6, 8, 8, 26, 9, 6, 7, 10, 28, 30]
实例
1数据统一新增属性
var datas = [
{ no: 1001, name: "狗蛋", age: 20 },
{ no: 1002, name: "吕布", age: 33 },
{ no: 1003, name: "蔡文姬", age: 18 },
{ no: 1004, name: "钢炮", age: 50 }
]
// var data=datas.map(function(item){
// item.age=item.age-2
// return item
// })
var data = datas.map(function (item) {
item.sex = 0 //新增属性
return item
})
console.log(data);
//data= {no: 1001, name: '狗蛋', age: 20, sex: 0}
//, {no: 1002, name: '吕布', age: 33, sex: 0}
//, {no: 1003, name: '蔡文姬', age: 18, sex: 0}
//, {no: 1004, name: '钢炮', age: 50, sex: 0}
2数据统一删除属性
var datas = [
{ no: 1001, name: "狗蛋", age: 20 },
{ no: 1002, name: "吕布", age: 33 },
{ no: 1003, name: "蔡文姬", age: 18 },
{ no: 1004, name: "钢炮", age: 50 }
]
var data = datas.map(function(item) {
delete(item.no) //新增属性
console.log();
return item
})
console.log(data);
// data= [ {name: '狗蛋', age: 20}
//,{name: '吕布', age: 33}
//,{name: '蔡文姬', age: 18}
//,{name: '钢炮', age: 50}]
3数据统一修改属性
var datas = [
{ no: 1001, name: "狗蛋", age: 20 },
{ no: 1002, name: "吕布", age: 33 },
{ no: 1003, name: "蔡文姬", age: 18 },
{ no: 1004, name: "钢炮", age: 50 }
]
var data = datas.map(function (item) {
item.age = item.aga-5
return item
})
console.log(data);
//data= {no: 1001, name: '狗蛋', age: 15}
//, {no: 1002, name: '吕布', age: 28}
//, {no: 1003, name: '蔡文姬', age: 13}
//, {no: 1004, name: '钢炮', age: 45}
5、forEach
foreac遍历数组中的每一个数据,没有返回值,并且不能被return终止;
一般用途:遍历数据
语法:数组.forEach(function(item,index,arr){})
item:数组中的每一项
index:每一项的索引
arr:数组本身
演示
var arr = [10, 20, 30, 10, 10, 20, 20, 100, 3200];
arr.forEach(function(item, index, arr) {
console.log(item);//数组每一项
console.log(index);//数组每一项的索引
console.log(arr);//数组本身
})
es6语法
let arr = [10, 20, 30, 10, 10, 20, 20, 100, 3200];
arr.forEach((item, index, arr)=> {
console.log(item);//数组每一项
console.log(index);//数组每一项的索引
console.log(arr);//数组本身
})
reduce
redude 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
一般用途:数据累加,数组合并,数组去重,数据累乘,累除
语法 数组.reduce(function(a,b){},c)
a:第一次是c的值,若,没有则是数组的第一个数据 第二次之后,a的值,是前面数据累加的和
b数组中的每一项
c a第一次执行的默认值
演示
var arr = [10, 20, 20, 30, 10, 100]
var sum = arr.reduce(function (a, b) { //a第一次是数组中第一个数组,b是第二个数据
console.log(a, b); //第二次之后,a的值,是前面数据累加的和
return a + b
})
var sum = arr.reduce(function (a, b) { //a第一次是数组中第一个数组,b是第二个数据
console.log(a, b); //第二次之后,a的值,是前面数据累减的和
return a - b
},2000)
console.log(sum);
var sum = arr.reduce(function (a, b) { //a第一次是数组中第一个数组,b是第二个数据
console.log(a, b); //第二次之后,a的值,是前面数据累乘的和
return a * b
})
console.log(sum);
var sum = arr.reduce(function (a, b) { //a第一次是数组中第一个数组,b是第二个数据
console.log(a, b); //第二次之后,a的值,是前面数据累除的和
return a / b
},1)
console.log(sum);
es6语法
let arr = [10, 20, 20, 30, 10, 100]
let sum = arr.reduce((a, b) => a + b, 0)
console.log(sum);
let arr = [10, 20, 20, 30, 10, 100]
let sum = arr.reduce((a, b) => a - b, 0)
console.log(sum);
let arr = [10, 20, 20, 30, 10, 100]
let sum = arr.reduce((a, b) => a * b, 1)
console.log(sum);
let arr = [10, 20, 20, 30, 10, 100]
let sum = arr.reduce((a, b) => a/ b, 1)
console.log(sum);
实例
1 将数组改造为一维数组
var arr = [[10, 20, 30], ['hello'], [50, 100], [40], [70, 11, 22]]
//将数组改造为一维数组
var arrx = arr.reduce(function (a, b) {
return a.concat(b)
})
arr= [10, 20, 30, 'hello', 50, 100, 40, 70, 11, 22]
2数组去重
var arr = [10, 20, 30, 10, 10, 20, 20, 100, 3200];
var arr0 = []
var obj = arr.reduce(function(pre, cur, index) {
//pre 对象
//cur 对象属性
//索引
if (!(cur in pre)) {//判断对象中是否有该属性
arr0.push(cur)//若没有则向数组中添加
}
pre[cur] = ''//对象中追加属性
return pre
}, {})
console.log(arr0);
3.统计字符串中字符的个数
var arr = str.split('');
var obj = arr.reduce(function (pre, cur) {
if (cur in pre) { //判断对象pre中是否包含cur属性
pre[cur]++ // pre.a
} else {
pre[cur] = 1
}
return pre
}, {})//pre的默认值为{}
console.log(obj);