Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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_Arrays_Typescript_Object - Fatal编程技术网

Javascript 需要以不同的方式格式化对象数组

Javascript 需要以不同的方式格式化对象数组,javascript,arrays,typescript,object,Javascript,Arrays,Typescript,Object,我有一个矩阵响应数组: matrixArray = [ {Responded: 1, RowName: row1, ColName: col1}, {Responded: 2, RowName: row1, ColName: col2}, {Responded: 0, RowName: row1, ColName: col3}, {Responded: 0, RowNa

我有一个矩阵响应数组:

matrixArray = [
                {Responded: 1, RowName: row1, ColName: col1},
                {Responded: 2, RowName: row1, ColName: col2},
                {Responded: 0, RowName: row1, ColName: col3},
                {Responded: 0, RowName: row2, ColName: col1},
                {Responded: 0, RowName: row2, ColName: col2},
                {Responded: 1, RowName: row2, ColName: col3},
                {Responded: 1, RowName: row3, ColName: col1},
                {Responded: 0, RowName: row3, ColName: col2},
                {Responded: 1, RowName: row3, ColName: col3},
                ...
                ...
              ];
它表示一列对一行的响应次数。 我需要以下格式的上述对象数组:

matrixArray = [
                {
                  RowName: row1,
                  col1: 1,           //Here '1' is no. of times column responded
                  col2: 2,
                  col3: 0
                },
                {
                  RowName: row2,
                  col1: 0,
                  col2: 0,
                  col3: 1
                },
                {
                  RowName: row3,
                  col1: 1,
                  col2: 0,
                  col3: 1
                },
              ];
我正在为此使用TypeScript。 谢谢。

您可以利用和获得所需的结果:

const matrixArray=[
{响应:1,RowName:'row1',ColName:'col1'},
{响应:2,RowName:'row1',ColName:'col2'},
{响应:0,RowName:'row1',ColName:'col3'},
{响应:0,RowName:'row2',ColName:'col1'},
{响应:0,RowName:'row2',ColName:'col2'},
{响应:1,RowName:'row2',ColName:'col3'},
{响应:1,RowName:'row3',ColName:'col1'},
{响应:0,RowName:'row3',ColName:'col2'},
{响应:1,RowName:'row3',ColName:'col3'}
];
const result=Object.values(matrixArray.reduce)((结果,条目)=>{
如果(!(结果中的entry.RowName)){
结果[entry.RowName]={RowName:entry.RowName};
}
if(!(结果[entry.RowName]中的entry.ColName])){
结果[entry.RowName][entry.ColName]=0;
}
结果[entry.RowName][entry.ColName]+=entry.responsed;
返回结果;
}, {}));
控制台日志(结果)您可以利用和获得所需的结果:

const matrixArray=[
{响应:1,RowName:'row1',ColName:'col1'},
{响应:2,RowName:'row1',ColName:'col2'},
{响应:0,RowName:'row1',ColName:'col3'},
{响应:0,RowName:'row2',ColName:'col1'},
{响应:0,RowName:'row2',ColName:'col2'},
{响应:1,RowName:'row2',ColName:'col3'},
{响应:1,RowName:'row3',ColName:'col1'},
{响应:0,RowName:'row3',ColName:'col2'},
{响应:1,RowName:'row3',ColName:'col3'}
];
const result=Object.values(matrixArray.reduce)((结果,条目)=>{
如果(!(结果中的entry.RowName)){
结果[entry.RowName]={RowName:entry.RowName};
}
if(!(结果[entry.RowName]中的entry.ColName])){
结果[entry.RowName][entry.ColName]=0;
}
结果[entry.RowName][entry.ColName]+=entry.responsed;
返回结果;
}, {}));
控制台日志(结果)您可以这样使用:

const matrixArray=[{响应:1,RowName:'row1',ColName:'col1'},{响应:2,RowName:'row1',ColName:'col2'},{响应:0,RowName:'row2',ColName:'col1'},{响应:0,RowName:'row2',ColName:'col2'},{响应:1,RowName:'RowName:'col3'},{响应:1,ColName:',{响应:0,RowName:'row3',ColName:'col2'},{响应:1,RowName:'row3',ColName:'col3'}]
const merged=matrixArray.reduce((acc,{responsed,RowName,ColName})=>{
acc[RowName]=acc[RowName]| |{RowName};
acc[RowName][ColName]=(acc[RowName][ColName]+响应)|响应;
返回acc;
}, {});
常量输出=对象值(合并);
console.log(输出)
您可以这样使用:

const matrixArray=[{响应:1,RowName:'row1',ColName:'col1'},{响应:2,RowName:'row1',ColName:'col2'},{响应:0,RowName:'row2',ColName:'col1'},{响应:0,RowName:'row2',ColName:'col2'},{响应:1,RowName:'RowName:'col3'},{响应:1,ColName:',{响应:0,RowName:'row3',ColName:'col2'},{响应:1,RowName:'row3',ColName:'col3'}]
const merged=matrixArray.reduce((acc,{responsed,RowName,ColName})=>{
acc[RowName]=acc[RowName]| |{RowName};
acc[RowName][ColName]=(acc[RowName][ColName]+响应)|响应;
返回acc;
}, {});
常量输出=对象值(合并);

console.log(输出)
请分享您的尝试。您可以编辑您的问题。此外,正如我上面所说,您应该在别人帮助您之前展示您的尝试。至少要分享您的方法和您无法理解的内容。我已经准备好了答案,我将在我忘记之前发布它。请下次努力展示您的尝试.抱歉@Jeto,但有一些连接问题,因此无法发布我的尝试。我在数组上使用了forEach和.filter。我的计划是先在不同的数组中获取行,然后推送相应的列。但该计划实际上不起作用。请共享您的尝试。您可以编辑您的问题。另外,正如我上面所说的,yo你应该在别人帮助你之前展示你的尝试。至少分享一下你的方法和你不明白的地方。我已经准备好了答案,我将在我失去联系之前发布它。请下次努力展示你的尝试。抱歉@Jeto,但是有一些连接问题,所以无法发布我的尝试。我很抱歉在数组上使用forEach和.filter。我的计划是先在不同的数组中获取行,然后将相应的列推送到该数组。但该计划实际上没有起作用。@a先生只是提醒一下:公认的答案在
reduce
中硬编码了列名。如果有另一个名为
col4@adiga修复了这个问题——我确实认为这些列是特定的。请注意,如果多个条目具有相同的
RowName
/
ColName
(在这种情况下,每次增加
响应的
计数是合乎逻辑的)。但不确定这是否可行(可能不会!)@Jeto是的,我必须在两者之间添加一个三元来处理这个问题。查看OP的数据,我假设行和列不会有任何重复项。@a先生只是提醒一下:公认的答案是在
reduce
中硬编码列名。如果有另一列名为
col4
@adiga修复了这个问题——我确实支持了无论如何,这些列都是特定的。请注意,如果多个条目具有相同的
RowName
/
ColName
(在这种情况下,每次增加
响应的
计数是合乎逻辑的)。不确定这一点