【问题标题】:merging javascript objects to csv format [closed]将javascript对象合并为csv格式[关闭]
【发布时间】:2019-08-27 12:46:02
【问题描述】:

我试图通过组合四个不同的数据集(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"

【问题讨论】:

  • 现金从何而来?你的代码在哪里?
  • 不清楚你是如何得到js-cash-ds-c,100
  • 对不起,输出 = "js-c#-ds-java,70\n\n js-c#-ds-c,100\n"
  • 你能清理一下你原来的问题吗?它的格式很差,这让我们更难为您提供帮助。

标签: javascript arrays csv object


【解决方案1】:

如果你想要这么奇怪的输入,那么可以这样:

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)

请注意投票下的接受按钮,以防万一。

【讨论】:

  • 不推荐使用eval,你应该从你的答案中删除它。
  • 好的,还有另一个选项可以访问 var 间接,但不要以为有人会有这样的输入 ;-)
  • 嘿,有一个错误——name.join 不是函数
  • 抱歉 - 没有注意到某些浏览器中存在全局名称字符串,您无法将其更改为数组,现在也可以在 FF、Chrome 中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2021-04-08
  • 2021-10-20
  • 1970-01-01
  • 2015-04-30
  • 2022-01-23
  • 2011-05-07
相关资源
最近更新 更多