首页 > 解决方案 > 无法理解这个特定的 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) // =>  [ [{…}, {…}, {…}], [{…}, {…}, {…}] ]

标签: javascriptreduce

解决方案


对象值

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 函数有四个参数:

  1. 累加器
  2. 当前值
  3. 当前指数
  4. 源数组

在你的问题中,

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 }, ...]
]

推荐阅读