javascript - 在嵌套数组概念方面需要帮助

标签 javascript node.js

我有一个嵌套数组查询。我需要特定格式的数据。它工作正常,只需要知道更好的方法即可。我必须绘制图表。

数据来自 API,格式如下:

[
  {
    company: 'BMW',
    cMin: 20,
    cMax: 100,
    vMin: 30,
    vMax: 90,
  },
  {
    company: 'Audi',
    cMin: 10,
    cMax: 90,
    vMin: 10,
    vMax: 80,
  },
]

我试过的!

const cRed = { name: 'C Red', data: [] };
const cGreen = { name: 'C Green', data: [] };
const vRed = { name: 'V Red', data: [] };
const vGreen = { name: 'V Green', data: [] };

dataset.forEach((e) => {
  cRed.data.push(e.cMin);
  cGreen.data.push(e.cMax);
  vRed.data.push(e.vMin);
  vGreen.data.push(e.vMax);
});

const all = [cRed, cGreen, vRed, vRed];

console.log(all);

预期结果:

[ 
  { name: 'C Red', data: [ 20, 10 ] },
  { name: 'C Green', data: [ 100, 90 ] },
  { name: 'V Red', data: [ 30, 10 ] },
  { name: 'V Red', data: [ 30, 10 ] } 
]

最佳答案

您可以创建一个对象并将其用于名称映射,然后使用 reduce 创建对象并对该对象使用 Object.values 作为最终结果。

const data = [{"company":"BMW","cMin":20,"cMax":100,"vMin":30,"vMax":90},{"company":"Audi","cMin":10,"cMax":90,"vMin":10,"vMax":80}]

const map = {
  cMin: 'C Red',
  cMax: 'C Green',
  vMin: 'V Red',
  vMax: 'V Green'
}

const obj = data.reduce((r, { company, ...rest }) => {
  Object.entries(rest).forEach(([key, value]) => {
    if (key in map) {
      if (!r[key]) r[key] = {
        name: map[key],
        data: []
      }
      r[key].data.push(value)
    }
  })
  return r;
}, {})

const result = Object.values(obj)
console.log(result)

关于javascript - 在嵌套数组概念方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59443848/

相关文章:

javascript - 计算对象属性给出与点表示法不同的结果

javascript - 在几何线之间创建中断,Three.JS

javascript - 为什么 JavaScript 函数的 toString 是实现依赖的?

node.js - Jade 的产量相当于多少?

node.js - IISnode - 使 Node 进程始终工作

node.js - nodejs将html文件发送到客户端

javascript - Linux 上的 Node.js 依赖项不兼容

javascript - 在回调函数中访问 jQuery Ajax 请求的 URL

javascript - 多个指令的执行顺序是什么?

javascript - 存储和加载文件系统中的媒体到 Electron 应用程序