Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从对象数组中提取数据_Javascript_Chart.js - Fatal编程技术网

Javascript 从对象数组中提取数据

Javascript 从对象数组中提取数据,javascript,chart.js,Javascript,Chart.js,我有一个从数据库中获取的对象数组: [对象数组][1] 我想为每个值创建一个数组,但我无法找到一种方法,因为我是javascript的初学者 例如: var Stats=[ [39,49,43,42,41,35], //SGW Value for each Object [37,44,49,46,52,42], //UD Value for each Object [8,11,8,8,16,15], //Virtual Value for each Object ...

我有一个从数据库中获取的对象数组:

[对象数组][1]

我想为每个值创建一个数组,但我无法找到一种方法,因为我是javascript的初学者

例如:

var Stats=[
  [39,49,43,42,41,35], //SGW Value for each Object
  [37,44,49,46,52,42], //UD Value for each Object 
  [8,11,8,8,16,15],    //Virtual Value for each Object
  ...     
]
目标是在chart.js上制作一个如下所示的图表:

[图表目标][2]

我需要循环数据集,因为我将添加更多数据,并且单独设置每个数据集太长


谢谢您的时间。

您可以这样做:

让数组1=[
{
第1点10分,
附件2:20
},
{
下午1时30分,
附件2:40
}
]
让array2=array1.map(item=>Object.values(item));

console.log(array2);//打印[[10,20],[30,40]]
首先,您需要为要打印的每个属性创建一个数组;i、 e:

var fsp = [],
    msg = [],
    sgw = [];
然后,您可以在数据集上循环并将数据放入每个数组中:

yourArray.forEach(function(obj){
    //obj takes the value of each object in the database
    fsp.push(obj.fsp);
    msg.push(obj.msg);
    sgw.push(obj.sgw);
})
或者,如果您更熟悉
for
循环

for(var obj of yourArray){
    fsp.push(obj.fsp);
    msg.push(obj.msg);
    sgw.push(obj.sgw);
}
最后,您可以按照示例中的说明创建一个数组

var result = [];

result.push(fsp, msg, sgw);
结果将是

[
    [89, 59, 43, 60, 81, 34, 28, 58, 75, 41],
    [77, 91, 4, 56, 6, 1, 42, 82, 97, 18],
    [24, 34, 4, 13, 75, 34, 14, 41, 20, 38]
]
欲了解更多信息,请参阅,和文档

编辑 正如您在注释中指出的,您可以动态生成数组,创建一个对象,如
var arrays={}。然后在
forEach()
中,或者如果
for…of
,则需要使用
for…in
循环在对象上循环。在循环头中声明的变量的值为index,数组为numeric,对象为literal。您必须执行以下操作:

yourArray.forEach(function(obj){
    for(let index in obj){
        if(!arrays[index]) // check if property has already been set and initialized
            arrays[index] = []; // if not, it's initialized

        arrays[index].push(obj[index]) // push the value into the array
    }
})
请注意,对象被视为数组,因为您在运行时使用填充的变量访问其属性

结果将是:

arrays = {
    fsp: [89, 59, 43, 60, 81, 34, 28, 58, 75, 41],
    msg: [77, 91, 4, 56, 6, 1, 42, 82, 97, 18],
    sgw: [24, 34, 4, 13, 75, 34, 14, 41, 20, 38]
}
要仅获取数组,请使用


如果你无法想象这是如何工作的,我建议你在Chrome开发者工具控制台或节点的控制台上做一些例子,或者在任何你可以得到实时反馈的地方,在代码的中间放上一些代码>控制台。这是一个多维数组。更好的是,你能举个例子说明你想怎么做吗?谢谢你的回答。是的,我已经这样做了,但对于较小的图形,对于较大的图形,在循环中创建每个数组,然后直接添加数据将非常有用。@Amoos51编辑了我的答案,以包含您所问的问题