Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 将两个阵列中的数据添加到CSV输出中_Javascript_Arrays - Fatal编程技术网

Javascript 将两个阵列中的数据添加到CSV输出中

Javascript 将两个阵列中的数据添加到CSV输出中,javascript,arrays,Javascript,Arrays,我有一些JSON,其形式如下 [ [ { "ID": 1, "col1": "something", "col2": "something" }, { "ID": 2, "col1": "something", "col2": "something" } ], [ { "ID": 1, "col3": "something else" },

我有一些JSON,其形式如下

[
  [
    {
      "ID": 1,
      "col1": "something",
      "col2": "something"
    },
    {
      "ID": 2,
      "col1": "something",
      "col2": "something"
    }
  ],
  [
    {
      "ID": 1,
      "col3": "something else"
    },
    {
      "ID": 2,
      "col3": "something else"
    }
  ]
]
使用D3,我将这个JSON解析为一个多维数组。然后我准备将数据作为CSV下载。所以现在,我正在做

let csvData = 'ID,col1,col2\n';
data[0].forEach(function(row) {
    let line = [];
    Object.keys(row).forEach(function(key) {
        line.push(row[key])
    });
    csvData = csvData + line.join(',') + '\n';
});
上面将生成一个平面csv文件,如下所示

id,col1,col2
1,something,something
2,something,something
我现在要做的是在下一个数组元素中添加匹配的id,并将col3添加到数据中。因此,
csvData
的总输出应该是

id,col1,col2,col3
1,something,something,something else
2,something,something,something else
如何将此数据添加到现有的
csvData


感谢您可以通过使用
for
循环来匹配它们,这样您就有了一个显式的计数器变量,并可以使用它引用两个数组中的相同索引

当然,这取决于数据在每个数组中的排序方式相同,并且每个数组中的元素数相同。如果情况并非总是如此,那么就不能使用这种方法

var数据=[
[
{
“ID”:1,
“col1”:“某物”,
“col2”:“某物”
},
{
“ID”:2,
“col1”:“某物”,
“col2”:“某物”
}
],
[
{
“ID”:1,
“col3”:“其他东西”
},
{
“ID”:2,
“col3”:“其他东西”
}
]
];
设csvData='ID,col1,col2,col3\n';
设arr1=data[0];
设arr2=数据[1];
对于(i=0;iconsole.log(csvData)
您可以通过使用
for
循环来匹配它们,这样您就有了一个显式的计数器变量,并且可以使用它引用两个数组中的相同索引

当然,这取决于数据在每个数组中的排序方式相同,并且每个数组中的元素数相同。如果情况并非总是如此,那么就不能使用这种方法

var数据=[
[
{
“ID”:1,
“col1”:“某物”,
“col2”:“某物”
},
{
“ID”:2,
“col1”:“某物”,
“col2”:“某物”
}
],
[
{
“ID”:1,
“col3”:“其他东西”
},
{
“ID”:2,
“col3”:“其他东西”
}
]
];
设csvData='ID,col1,col2,col3\n';
设arr1=data[0];
设arr2=数据[1];
对于(i=0;iconsole.log(csvData)这不是傻瓜式的,但它会基于JSON数组动态构建CSV字符串

我试图保持它的简洁,但在关键点的转换字段,记录等离开

if(Set.prototype.addAll==未定义){
Set.prototype.addAll=函数(数组){
让args=arguments.length>1?参数:数组;
args.forEach(item=>this.add(item));/*将数组中的多个项添加到集合中*/
归还这个;
};
}
log(multiDataToCsv(getData(),'ID','\t');
函数multiDataToCsv(jsonArrays、primaryKey、delimiter){
让keys=Array.from(jsonArrays.reduce)((fields,jsonArray)=>{
返回fields.addAll(Object.keys(jsonArray[0]);
},新集合());
let records=jsonArrays[0]。reduce((记录,数据)=>{
return records.concat(jsonArray.reduce)((record,jsonArray)=>{
返回Object.assign(记录,jsonArray.filter(item=>item[primaryKey]==data[primaryKey])[0]);
}, {}));
}, []);
让csvData=[keys].concat(records.map(record=>keys.map(key=>record[key]));
返回csvData.map(row=>row.join(分隔符)).join('\n');
}
函数getData(){
返回[
[{
“ID”:1,
“col1”:“1.0版的东西”,
“col2”:“某种东西1.1”
}, {
“ID”:2,
“col1”:“2.0版的东西”,
“col2”:“一些2.1”
}],
[{
“ID”:1,
“col3”:“其他内容1”
}, {
“ID”:2,
“col3”:“其他内容2”
}]
];
}

.as控制台包装{top:0;max height:100%!important;}
这不是傻瓜式的,但它基于JSON数组动态构建CSV字符串

我试图保持它的简洁,但在关键点的转换字段,记录等离开

if(Set.prototype.addAll==未定义){
Set.prototype.addAll=函数(数组){
让args=arguments.length>1?参数:数组;
args.forEach(item=>this.add(item));/*将数组中的多个项添加到集合中*/
归还这个;
};
}
log(multiDataToCsv(getData(),'ID','\t');
函数multiDataToCsv(jsonArrays、primaryKey、delimiter){
让keys=Array.from(jsonArrays.reduce)((fields,jsonArray)=>{
返回fields.addAll(Object.keys(jsonArray[0]);
},新集合());
let records=jsonArrays[0]。reduce((记录,数据)=>{
return records.concat(jsonArray.reduce)((record,jsonArray)=>{
返回Object.assign(记录,jsonArray.filter(item=>item[primaryKey]==data[primaryKey])[0]);
}, {}));
}, []);
让csvData=[keys].concat(records.map(record=>keys.map(key=>record[key]));
返回csvData.map(row=>row.join(分隔符)).join('\n');
}
函数getData(){
返回[
[{
“ID”:1,
“col1”:“1.0版的东西”,
“col2”:“某种东西1.1”
}, {
“ID”:2,
“col1”:“2.0版的东西”,
“col2”:“一些2.1”
}],
[{
“ID”:1,
“col3”:“其他内容1”
}, {
“ID”:2,
“col3”:“其他内容2”
}]
];
}

。作为控制台包装{top:0;max height:100%!important;}
请注意,这一切似乎都是普通的JavaScript。我在这里看不到D3代码,也不需要它。我使用D3绘制图表,由于我可以访问它,所以我使用D3.json来解析json文件。D3不是这个问题的一部分,我只是想让大家