我试图通过组合四个不同的数据集(data1、data2、data3、data4)来获得如下所示的输出(预期输出), 其中所有要组合的名称和要添加的值。
var
data1 = [{name:"js",value:"20"}],
data2=[{name:"c#",value:10}],
data3=[{name:"ds",value:30}],
data4 = [{name:"java",value:10},{name:"c",value:40}]
预期输出
output = "js-c#-ds-java,70\n\
js-c#-ds-c,100\n"
最佳答案
如果你想要如此奇怪的输入,那么像这样:
var
data1 = [{name:"js",value:"20"}],
data2=[{name:"c#",value:10}],
data3=[{name:"ds",value:30}],
data4 = [{name:"java",value:10},{name:"c",value:40}]
var item, nameStack = [], sums={}, output = "";
var i=1;
while(item = window["data" + i++]) {
var dashName = nameStack.join('-'), val;
if (dashName) {
val = sums[dashName];
} else val = 0;
for(var j in item) {
var dashName2;
nameStack.push(item[j].name);
dashName2 = nameStack.join('-');
sums[dashName2] = val + parseInt(item[j].value);
if(item.length > 1) nameStack.pop();
}
delete sums[dashName];
}
console.log(JSON.stringify(sums))
for(item in sums) {
output += item + "," + sums[item] + "\n"
}
console.log(output)
或者如果您有像这样更简单的数组输入:
var
data = [[{name:"js",value:"20"}],
[{name:"c#",value:10}],
[{name:"ds",value:30}],
[{name:"java",value:10},{name:"c",value:40}]];
var item, nameStack = [], sums={}, output = "";
var i=1;
for(item in data) {
item = data[item];
var dashName = nameStack.join('-'), val;
if (dashName) {
val = sums[dashName];
} else val = 0;
for(var j in item) {
var dashName2;
nameStack.push(item[j].name);
dashName2 = nameStack.join('-');
sums[dashName2] = val + parseInt(item[j].value);
if(item.length > 1) nameStack.pop();
}
delete sums[dashName];
}
console.log(JSON.stringify(sums))
for(item in sums) {
output += item + "," + sums[item] + "\n"
}
console.log(output)
介意投票下方的接受按钮,以防万一。
关于javascript - 将 javascript 对象合并为 csv 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57675036/