reduce()是JavaScript中一种强大的数组高阶函数,它可用于归纳(折叠)数组中的所有元素到一个单独的值。reduce()方法在前端开发中应用广泛,其功能强大,可用于数组转换、求和、筛选、调整结构等众多场合。
reduce()方法的基本语法如下:
array.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
它接受两个参数,第一个参数是回调函数,第二个参数是累加器初始值(可选)。回调函数接受四个参数:输出累加器的结果;当前元素的值;当前元素的索引(可选)和数组本身(可选)。
下面举例说明reduce()的一些用途。首先,reduce()实现数组求和可以这样写:
let arr = [1, 2, 3, 4, 5];let sum = arr.reduce((accumulator, currentValue) => accumulator currentValue);console.log(sum); // 15
reduce()方法也可以实现对数组元素进行分组:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let groups = arr.reduce((accumulator, currentValue) => { if (currentValue % 2 === 0) { accumulator.evens.push(currentValue); } else { accumulator.odds.push(currentValue); } return accumulator;}, { evens: [], odds: [] });console.log(groups); // { evens: [2, 4, 6, 8, 10], odds: [1, 3, 5, 7, 9] }
此外,reduce()方法还可以用来将一组具有父子关系的数据转换为树形结构:
let data = [ { id: 1, name: '中国' }, { id: 2, name: '北京', parentId: 1 }, { id: 3, name: '上海', parentId: 1 }, { id: 4, name: '海淀区', parentId: 2 }, { id: 5, name: '朝阳区', parentId: 2 }, { id: 6, name: '浦东区', parentId: 3 }, { id: 7, name: '徐汇区', parentId: 3 }];function buildTree(data, id = null) { return data.filter(item => item.parentId === id) .map(item => ({ id: item.id, name: item.name, children: buildTree(data, item.id) }));}let tree = buildTree(data);console.log(tree);
以上是reduce()在前端开发中多方面地应用,相信使用过的朋友都会觉得它是一个很有用的工具。