首页 > 解决方案 > 将数据数组转换为字符串

问题描述

我有以下格式的数据:

[
    {
      "id": 1,
      "cost": 323,
      "comparison": "High",
      "flag": "Alert"
    }
    ...
]

我正在尝试为Google 图表准备这些数据,更具体地说是制作直方图。所需的格式类似于下一个示例:

var data = google.visualization.arrayToDataTable([
    ['Name', 'Number'],
    ['Name 1', number1],
    ['Name 2', number2],
    ['Name 3', number3],
    ...
]);

因此,从我的输入数据中,我想使用idandcost属性。为了解决这个问题,我实现了下一个代码:

const keys = Object.keys(this.data[0]).filter(e => !(["comparison","flag"].includes(e)));
const values = this.data.map(e => Object.entries(e).filter(([k]) => keys.includes(k)).map(([, v]) => v));
const formattedArray = [keys, ...values];

这在某种程度上给了我所需的数据,我看到的是这样的:

var data = google.visualization.arrayToDataTable([
    ['id', 'cost'],
    [1, 323]
    ...
]);

但是我的图表显示不正确,我认为我面临的问题id's作为.intstring

如何将所有放入第一列的值转换为字符串?

谢谢!

标签: javascriptarrays

解决方案


可以使用Number.isInteger()判断变量是否为数字,然后使用toString()方法进行转换。您可以使用index地图中的参数仅对第一列进行字符串化。您可以像这样更改代码:

const data = [{ "id": 1, "cost": 323, "comparison": "High", "flag": "Alert"}]

const keys = Object.keys(data[0]).filter(e => !(["comparison","flag"].includes(e)));
const values = data.map(e => Object.entries(e).filter(([k]) => keys.includes(k)).map(([, v], i ) => {
  if ( i === 0 && Number.isInteger( v ) ) {
    return v.toString();
  }
  return v;
}));
const formattedArray = [keys, ...values];

console.log( formattedArray );


推荐阅读