javascript - 无法理解这个特定的 Array reduce 方法
问题描述
我需要详细解释我在对象数组上使用的 Array reduce 方法。Array reduce 方法根据 matchday 值将给定数组转换为对象数组。因此,它过滤数组并将具有相同 matchday 值的对象存储在嵌套的对象数组中。我知道减速器一般只在这种情况下我遗漏了一些东西。谁可以给我解释一下这个?任何帮助,将不胜感激。
const data = [
{ id: 301998, season: 2020-2021, utcDate: "2020-09-12T16:45:00Z", status: "FINISHED", matchday: 1 },
{ id: 301999, season: 2020-2021, utcDate: "2020-09-12T18:00:00Z", status: "FINISHED", matchday: 1 },
{ id: 302000, season: 2020-2021, utcDate: "2020-09-12T19:00:00Z", status: "FINISHED", matchday: 1 },
{ id: 302006, season: 2020-2021, utcDate: "2020-09-18T18:00:00Z", status: "FINISHED", matchday: 2 },
{ id: 302007, season: 2020-2021, utcDate: "2020-09-19T14:30:00Z", status: "FINISHED", matchday: 2 },
{ id: 302008, season: 2020-2021, utcDate: "2020-09-19T16:45:00Z", status: "FINISHED", matchday: 2 }
]
let res = Object.values(
data.reduce((acc, m) => {
acc[ m.matchday ] = acc[ m.matchday ] || [];
acc[ m.matchday ].push(m);
return acc;
}, {})
);
console.log(res) // => [ [{…}, {…}, {…}], [{…}, {…}, {…}] ]
解决方案
对象值
Object.values() 方法返回给定对象自己的可枚举属性值的数组,其顺序与 for...in 循环提供的顺序相同。(唯一的区别是 for...in 循环也枚举原型链中的属性。)
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.values(object1));
// expected output: Array ["somestring", 42, false]
减少功能
reduce() 方法对数组的每个元素执行一个 reducer 函数(您提供),从而产生单个输出值。
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15
reducer 函数有四个参数:
reducer 函数有四个参数:
- 累加器
- 当前值
- 当前指数
- 源数组
在你的问题中,
data
数组被简化为以下结构的对象 -
obj = {
1: [{ id: 301998, season: 2020-2021, utcDate: "2020-09-12T16:45:00Z", status: "FINISHED", matchday: 1 }, ...],
2: [{ id: 23412, season: 2020-2021, utcDate: "2020-09-12T16:45:00Z", status: "FINISHED", matchday: 2 }, ...]
}
现在,上面对象上的 Object.values 只返回上面对象(obj)值的数组。
返回的数组的长度 = '数据数组中不存在唯一匹配天数'
输出 -
[
[{ id: 301998, season: 2020-2021, utcDate: "2020-09-12T16:45:00Z", status: "FINISHED", matchday: 1 }, ...],
[{ id: 23412, season: 2020-2021, utcDate: "2020-09-12T16:45:00Z", status: "FINISHED", matchday: 2 }, ...]
]
推荐阅读
- python - 将所有库和依赖项添加到 AWS lambda for python 应用程序
- php - Laravel 使用错误的表进行注册并返回“SQLSTATE[42S22]: Column not found”
- powershell - Invoke-Command 仅在数组中的最后一个节点上运行
- header-files - IAR Workbench 的头文件
- r - 在R中用ggplot2区分多个图例的位置
- mongodb - Why does my MongoDB data disappear when I convert my Meteor App to use Docker?
- react-native - React Native 椭圆滚动
- excel - 复制并粘贴到下一个空白行?
- dataframe - 将csv文件读入python pandas
- saml-2.0 - 对于某些 Idp,只有 Acs URL 发送 500 错误,不幸的是,没有记录或返回任何内容,以便了解究竟发生了什么