【问题标题】:how to access array inside object without keys如何在没有键的情况下访问对象内部的数组
【发布时间】:2022-01-17 04:33:42
【问题描述】:

我有一个如下所示的 JSON 数据:

 {
  "chart":[
     [
        1627776011000,
        28
     ],
     [
        1627776371000,
        38
     ],
     [
        1627776731000,
        48
     ],
     ...
    ]
}

我想在 Chart.js 中使用这些数据,其中 1627776011000 ... x 轴值,28 ... y 轴值。

我知道我可以用数组 push 来做到这一点

const myArr = JSON.parse(dataJSON);

const data = []; 
const labels = [];

myArr.chart.forEach((item) => {
    labels.push(item[0]);
    data.push(item[1]);
});

但有没有更好的方法,例如map

【问题讨论】:

  • 你可以使用reduce,但是你这样做的方式很好。尽量不要寻找“完美”的解决方案,找到可行的解决方案会更实际。
  • “更好”是什么意思?基于意见的问题在 Stack Overflow 上是题外话。

标签: javascript arrays object chart.js


【解决方案1】:

您可以在如下使用.reduce()

const myArr = {
  "chart":[
     [
        1627776011000,
        28
     ],
     [
        1627776371000,
        38
     ],
     [
        1627776731000,
        48
     ]
    ]
};

const [labels, data] = myArr.chart.reduce((acc,cur) => [
    [...acc[0], cur[0]],
    [...acc[1],cur[1]]],
[[],[]]);
console.log( labels, data );

【讨论】:

    【解决方案2】:

    在我看来,这像是一个虚构的问题。

    如果您的数据点只是 x 和 y 值,那么说第一个数组元素是 x,第二个是 y 并没有错。

    有些人会争辩说你应该将其设为具有xValueyValue 等属性的对象。

    但是,任何一种情况的任何好处或坏处都是微不足道的。您可以想象有人说 Object 版本更具可读性。 javascript 运行时(至少 V8)更难优化 Object 版本:https://v8.dev/blog/elements-kinds

    除非你已经测量过了,而且它很重要,否则没关系。

    【讨论】:

      【解决方案3】:

      您可以通过两次调用map()

      const labels = myArr.chart.map(el => el[0]);
      const data = myArr.chart.map(el => el[1]);
      

      【讨论】:

      • 谢谢。完美的!你知道这比从问题中推入数组快多少吗?
      • 可能会更慢,因为它必须执行两个循环。但可能更快,因为它可以一次分配结果数组,而不是增量增长。您需要对其进行概要分析。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      相关资源
      最近更新 更多