javascript - 转换数据的逻辑

标签 javascript algorithm data-structures

我有一个 api 以下列格式返回数据:

[
    {
        "_id": 1567362600000,
        "KIDate": "2019-09-02",
        "KITools": [
            {
                "data": 1,
                "tool": "A"
            },
            {
                "data": 2,
                "tool": "B"
            }
        ]
    },
    {
        "_id": 1567519839316,
        "KIDate": "2019-09-01",
        "KITools": [
            {
                "data": 2,
                "tool": "A"
            },
{
                "data": 1,
                "tool": "C"
            }
        ]
    },
    {
        "_id": 1567519839317,
        "KIDate": "2019-08-31",
        "KITools": [
            {
                "data": 0,
                "tool": "C"
            }
        ]
    },
  ]

我想转换此数据以获得以下数组:

Result 1 -  [“2019-09-02”,”2019-09-01”,”2019-08-31”]
Result 2 -  [ {name: ‘A’, data:[1, 2, 0] }, { name: 'B', data: [2, 0, 0] }, { name: 'C', data: [0, 1, 0]}]

目前,我能够通过使用循环和每个定义变量以及工具名称来实现这一点,例如跟随和循环 api 数据以推送到该变量中。

var result2 = [{ name: 'A', data: [] }, { name: 'B', data: [] }, { name: 'C', data: [] }];

但这不是预期的行为,工具名称可以更改,我必须根据 api 返回的数据动态地弄清楚。 在不疯狂循环的情况下实现此目标的最佳方法是什么。

最佳答案

您可以使用 reduce 方法为每个工具获取包含日期数组和值对象的结果。

const data = [{"_id":1567362600000,"KIDate":"2019-09-02","KITools":[{"data":1,"tool":"A"},{"data":2,"tool":"B"}]},{"_id":1567519839316,"KIDate":"2019-09-01","KITools":[{"data":2,"tool":"A"},{"data":1,"tool":"C"}]},{"_id":1567519839317,"KIDate":"2019-08-31","KITools":[{"data":0,"tool":"C"}]}]

const result = data.reduce((r, {KIDate, KITools}, i) => {
  r.dates.push(KIDate);
  
  KITools.forEach(({data: dt, tool}) => {
    if(!r.values[tool]) r.values[tool] = Array(data.length).fill(0);
    r.values[tool][i] = dt
  })
  
  return r;
}, {dates: [], values: {}})

console.log(result)

关于javascript - 转换数据的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57794619/

相关文章:

javascript - array.prototype.length 给我一个错误是什么

javascript - 用 javascript 添加元素到 DIV(高度 100%)不会改变 div 的高度?

algorithm - 在词典中查找最接近一对的字符串

java - 在 Java 中使用什么数据类型来匹配间隔?

string - 如何将给定文本分解为字典中的单词?

javascript - 单击 'expand' 按钮后如何设置固定表大小

javascript - ReferenceError 尝试在 Node.js 中的等待回调中访问闭包变量

javascript - 根据坐标识别顺序

c# - C# 中是否有内置算法或库可用于计算概率函数?

java - (二维数组)Java错误: constant expression required