JS中的some()、every() 、 reduce()方法

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

语法:array.some( function ( item, index, arr) {} ,thisValue)

some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。

注意: some() 不会对空数组进行检测。

注意: some() 不会改变原始数组。

const blobs = [
  "application/x-download",
  "application/vnd.ms-excel",
  "application/msword",
  "application/octet-stream",
];

request.interceptors.response.use(async (response, request) => {
  const contentType = response.headers.get("Content-Type");

  const isBlob = blobs.some((item) => contentType?.includes(item));

  if (isBlob) {
    request.responseType = "blob";
    return response;
  }
  
  const { error, code, status, msg, data } = await response.clone().json();

  if ((code === 200 || code === 202) && !error) return response;

  throw {
    response: {
      status: code || status,
      statusText: msg,
      data: data,
    },
  };
});

return request;
}

二、还有every()方法,与some()方法相反

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

语法:array.every( function ( item, index, arr) {} ,thisValue)

every() 方法使用指定函数检测数组中的所有元素:

如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。

如果所有元素都满足条件,则返回 true。

注意: every() 不会对空数组进行检测。

注意: every() 不会改变原始数组。

const list = [10, 12, 8, 12];
if (list.every((number) => number > 9)) {
   //代码块
}
//因为8小于9   所以返回false

三、reduce() 方法

接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。 

语法:array.reduce( function( total, currentValue, currentIndex, arr ),  initialValue )

array.reduce(callback,[initialValue])
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。 

callback (执行数组中每个值的函数,包含四个参数)

    1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
    2、currentValue (数组中当前被处理的元素)
    3、index (当前元素在数组中的索引)
    4、array (调用 reduce 的数组)    
    initialValue (作为第一次调用 callback 的第一个参数。)
 

注意:

1. reduce() 对于空数组是不会执行回调函数的。

2. 当提供了初始值initialValue,则第一次执行回调函数时previousvalue就是initialValue,则currentValue是数组第一项;如果没有提供初始值,则previousvalue是数组第一项,currentValue是数组第二项。

reduce的常用方法 ( 最好设置默认值 )
1. 数组求和、求乘积

let numbers = [1, 2, 3, 4, 5]
let result1 = numbers.reduce((sum, n) => sum + n, 0)
console.log(result1); // 15
 
// let result2 = numbers.reduce((sum, n) => sum * n)
let result2 = numbers.reduce((sum, n) => sum * n, 1)
console.log(result2); // 120


2. 累加数组中对象的值

let numberObj = [{n: 1}, {n: 2}, {n: 3}, {n: 4}, {n: 5}]
let result3 = numberObj.reduce((sum, obj) => sum + obj.n, 0)
console.log(result3); // 15


3. 计算数组中每个元素出现的次数

let colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'purple', 'red']
let countColor = colors.reduce(function(allColors, color){
    if(color in allColors) {
        allColors[color]++;
    } else {
        allColors[color] = 1;
    }
    return allColors;
}, {});
console.log(countColor); // {blue: 1, green: 1, indigo: 1, orange: 1, purple: 1, red: 2, yellow: 1}

4. 数组去重

let arr = [1, 2, 3, 4, 4, 1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
        return pre.concat(cur)
    }else{
        return pre
    }
},[])
console.log(newArr); // [1, 2, 3, 4]


5. 二维数组变一维数组

let twoArray = [[0, 1], [2, 3], [4, 5]]
let oneArray = twoArray.reduce((arr, val) => arr.concat(val), [])
console.log(oneArray);  // [0, 1, 2, 3, 4, 5]


6. 将多维数组转化为一维

let moreArr = [[0, 1], [2, 3], [4,[5,6,7]]]
const resultArr = function(moreArr){
      return moreArr.reduce((pre,cur) => pre.concat(Array.isArray(cur) ? resultArr(cur) : cur), [])
}
console.log(resultArr(moreArr)); // [0, 1, 2, 3, 4, 5, 6, 7]


7. 根据属性把对象分类

let peopleInfo = [
    {name: 'aaa', age: 15, sex: '男'},
    {name: 'bbb', age: 16, sex: '女'},
    {name: 'ccc', age: 15, sex: '女'}
]
function groupBy(objectArray, property) {
    return objectArray.reduce((resultObj, obj) => {
        var key = obj[property]
        if(!resultObj[key]) {
            resultObj[key] = []
        }
        resultObj[key].push(obj)
        return resultObj;
    }, {})
}
let peopleAgeGroup = groupBy(peopleInfo, 'age')
console.log(peopleAgeGroup); // {15: [{name: "aaa", age: 15, sex: "男"}, {name: "ccc", age: 15, sex: "女"}],16: [{name: "bbb", age: 16, sex: "女"}]}
let peopleSexGroup = groupBy(peopleInfo, 'sex')
console.log(peopleSexGroup); // {男: [{name: "aaa", age: 15, sex: "男"}], 女: [{name: "bbb", age: 16, sex: "女"}, {name: "ccc", age: 15, sex: "女"}]}


参考文献

1、JS中的some()方法_js some_沈以诚的博客-CSDN博客

2、reduce() 的常用方法_努力学习~冲鸭的博客-CSDN博客

3、JS数组reduce()方法详解及高级技巧_js reduce方法 数据库返回的数据提升 'reduce' of undefined 但是自己写_12_12 ^^ DaDa的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/qq_35624642/article/details/127203302