javascript - 获取嵌套对象值并将其放在表头上

标签 javascript arrays angular reduce

在下面stackblitz样本。我有以下数据:

我的表显示了我想要的内容,正如您在时间线对象中看到的那样,“开始” 值与 aval 数组<中的值完全相同

因此,无论如何我可以在没有时间轴对象的情况下显示那些表头吗? (使用 filter、reduce 或 Array.from)也许我可以循环到那个非常嵌套的 aval 数组并将它们作为一个单独的数组获取,有点像

"aval" = ["11-19", "11-20", "11-21", "11-22"]

我正在使用过滤器,但到目前为止一无所获。

数据:

{
  "timeline": {
    "timeline_values": [{
        "tag": 0,
        "start": "11-19"
      },
      {
        "tag": 1,
        "start": "11-20"
      },
      {
        "tag": 2,
        "start": "11-21"
      },
      {
        "tag": 3,
        "start": "11-22"
      }
    ]
  },
  "employees": [{
      "EmployeeID": "56250f",
      "FirstName": "Downs",
      "aval": [{
          "start": "11-19",
          "end": "2",
          "ava": "30",
          "health": "4"
        },
        {
          "start": "11-20",
          "end": "2",
          "ava": "40",
          "health": "4"
        },
        {
          "start": "11-21",
          "end": "2",
          "ava": "50",
          "health": "4"
        },
        {
          "start": "11-22",
          "end": "2",
          "ava": "60",
          "health": "4"
        }
      ]
    },

最佳答案

假设您想要员工列表中的 aval 列表,您可以尝试结合使用 mapreduce

  • 映射以创建数组数组,该数组将具有特定员工的所有开始 aval 值 employee -> aval -> start

  • Reduce 以展平数组的数组

  • 最后使用 ES6 Set 来选择唯一值。

const employees = [{
    "EmployeeID": "56250f",
    "FirstName": "Downs",
    "aval": [{
        "start": "11-19",
        "end": "2",
        "ava": "30",
        "health": "4"
      },
      {
        "start": "11-20",
        "end": "2",
        "ava": "40",
        "health": "4"
      },
      {
        "start": "11-21",
        "end": "2",
        "ava": "50",
        "health": "4"
      },
      {
        "start": "11-22",
        "end": "2",
        "ava": "60",
        "health": "4"
      }
    ]
  },
  {
    "EmployeeID": "56250f",
    "FirstName": "Mckenzie",
    "aval": [{
        "start": "11-19",
        "end": "2",
        "ava": "1",
        "health": "4"
      },
      {
        "start": "11-20",
        "end": "2",
        "ava": "2",
        "health": "4"
      },
      {
        "start": "11-21",
        "end": "2",
        "ava": "3",
        "health": "4"
      },
      {
        "start": "11-22",
        "end": "2",
        "ava": "4",
        "health": "4"
      }
    ]
  }, {
    "EmployeeID": "56250f",
    "FirstName": "Charles",
    "aval": [{
        "start": "11-19",
        "end": "2",
        "ava": "100",
        "health": "4"
      },
      {
        "start": "11-20",
        "end": "2",
        "ava": "200",
        "health": "4"
      },
      {
        "start": "11-21",
        "end": "2",
        "ava": "300",
        "health": "4"
      },
      {
        "start": "11-22",
        "end": "2",
        "ava": "400",
        "health": "4"
      }
    ]
  }
]

const mappedAvals = employees.map(emp => emp.aval.map(av => av.start));
console.log("************* MAPPED AVALS **************");
console.log(mappedAvals);
console.log("************* MAPPED AVALS **************");

const flattenedAvals = mappedAvals.reduce((acc, aval) => [...acc, ...aval], []);

console.log("************* FLATTENED AVALS **************");
console.log(flattenedAvals);
console.log("************* FLATTENED AVALS **************");

const distinctAvals = [...(new Set(flattenedAvals))];

console.log("************* DISTINCT AVALS **************");
console.log(distinctAvals);
console.log("************* DISTINCT AVALS **************");

关于javascript - 获取嵌套对象值并将其放在表头上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439224/

相关文章:

javascript - `AssignmentExpression`如何从EcmaScript语法中的 `Statement`导出

javascript - 如何使用三星智能电视中的按钮处理事件?

python - 如何将 .csv 文件转换为不同类型的 numpy 数组

ios - 如何在标签中打印数组?

c - 应用于数组名称的 sizeof 与指向数组第一个元素的指针

javascript - 使用#name 绑定(bind)字段不工作 angular 2 mac

javascript - 在 Angular6 中对一个组件使用多路由

javascript - 如何将 javascript 变量发送到 PHP 并返回结果

javascript - Python、Flask - 如何使用 DHTML uploader 加载文件

javascript - 如何使用 GULP/NODE 在 JavaScript 中获取 Jenkins BUILD_NUMBER?