Javascript 将对象数组更改为CSV模式
我有以下数组:Javascript 将对象数组更改为CSV模式,javascript,arrays,loops,object,csv,Javascript,Arrays,Loops,Object,Csv,我有以下数组: var objRow = [ { 2011-09-20 : [0, 100, 0], customerID : C1101, ANI : 1234 }, { 2011-09-25 : [0, 0, 0], customerID : C1101, ANI : 1234 }, { 2011-09-20 : [0, 500, 0],
var objRow = [
{
2011-09-20 : [0, 100, 0],
customerID : C1101,
ANI : 1234
},
{
2011-09-25 : [0, 0, 0],
customerID : C1101,
ANI : 1234
},
{
2011-09-20 : [0, 500, 0],
customerID : C1102,
ANI : 5678
},
{
2011-09-22 : [0, 0, 50],
customerID : C1102,
ANI : 5678
}
]
我想从上面的数组创建CSV数据。但是,我无法将该阵列更改为此CSV模式:
1234, C1101, 0, 0, 100, 0, 0, 0
5678, C1102, 0, 0, 500, 0, 0, 50
我尝试使用reduce对customerID
进行分组,因为每个对象中的第一个索引是date。我有一些日期:
var dateArr = ["2011-09-20", "2011-09-22", "2011-09-25"];
这是我的代码:
var result = objRow.reduce(function(prev, curr, index, arr) {
var num = curr["customerID"];
if (!prev[num]) {
prev[num] = [];
}
for (var j = 0; j < dateArr.length; j++) {
prev[num].push(curr[dateArr[j]]);
}
return prev;
}, {});
上,下,上,下,上,下
如何创建上面的CSV模式?
谢谢…我想这会给你想要的结果:
var objRow=[{
日期:2011-09-20,
nums:[01100,0],
customerID:“C1101”,
安尼:1234
}, {
日期:2011-09-25,
nums:[0,0,0],
customerID:“C1101”,
安尼:1234
}, {
日期:2011-09-20,
nums:[0500,0],
customerID:“C1102”,
安尼:5678
}, {
日期:2011-09-22,
nums:[0,0,50],
customerID:“C1102”,
安尼:5678
}];
//创建CSV格式的字符串
var csvLine=“”;
var numsArray=新数组();
对于(var i=0;iTry
var objRow=[
{
"2011-09-20" : [0, 100, 0],
customerID:“C1101”,
安尼:1234
},
{
"2011-09-25" : [0, 0, 0],
customerID:“C1101”,
安尼:1234
},
{
"2011-09-20" : [0, 500, 0],
customerID:“C1102”,
安尼:5678
},
{
"2011-09-22" : [0, 0, 50],
customerID:“C1102”,
安尼:5678
}
];
var arr=[],
res=[],
csv=$.map(objRow,函数(v,k){
//项目
arr.push(v.ANI,v.customerID,v[Object.keys(v)[0]]);
//阵列
var a=$.grep(arr,函数(val,索引){
返回$.isArray(val)
});
//弦
var s=阵列滤波器(功能(i){
返回类型i==“字符串”
});
//分类项目
res.push([arr.filter(Number)[0]
,s[0]
连接(“,”)
,arr.filter(Number).slice(-1)[0]
,s.slice(-1)[0]
,a.加入(“,”);
返回res
}).slice(-1)[0];
//格式化文本,html
csv=(csv.slice(0,3)+“
”+csv.slice(-3))
.替换(/,/g,“,”);
$(“正文”).append(csv)
var objRow=[
{
"2011-09-20" : [0, 100, 0],
customerID:“C1101”,
安尼:1234
},
{
"2011-09-25" : [0, 0, 0],
customerID:“C1101”,
安尼:1234
},
{
"2011-09-20" : [0, 500, 0],
customerID:“C1102”,
安尼:5678
},
{
"2011-09-22" : [0, 0, 50],
customerID:“C1102”,
安尼:5678
}
];
var arr=[],
res=[],
csv=$.map(对象行,函数(v,k){
arr.push(v.ANI,v.customerID,v[Object.keys(v)[0]]);
//阵列
var a=$.grep(arr,函数(val,索引){
返回$.isArray(val)
});
//弦
var s=阵列滤波器(功能(i){
返回类型i==“字符串”
});
res.push([arr.filter(Number)[0],s[0],a.splice(0,2).join(“,”),arr.filter(Number).slice(-1)[0],s.slice(-1)[0],a.join(“,”);
返回res
}).slice(-1)[0];
csv=(csv.slice(0,3)+“
”+csv.slice(-3))
.替换(/,/g,“,”);
$(“正文”).append(csv)
我认为csv不支持阵列为什么[01100,0]
在CSV中变成0,0,100
?逻辑是什么?@bto.rdz是的,我知道,因此我想把上面的数组转换成逗号分隔的。@Ja͢检查所有的索引组合。index-0_object0,index-0_object1,index-1_object0,index-1_object1等等,谢谢你的回答。我已经更新了我的问题,关于nums
规则@fanjavaid-我更新了我的答案,NUM现在像你的问题一样交织在一起
[0, 100, 0] // from first Object
[0, 0, 0] // from second Object
fistObject_firstIndex, secondObject_firstIndex, firstObject_secondIndex, secondObject_secondIndex, firstObject_thirdIndex, secondObject_thirdIndex
0, 0, 100, 0, 0, 0
var objRow = [
{
"2011-09-20" : [0, 100, 0],
customerID : "C1101",
ANI : 1234
},
{
"2011-09-25" : [0, 0, 0],
customerID : "C1101",
ANI : 1234
},
{
"2011-09-20" : [0, 500, 0],
customerID : "C1102",
ANI : 5678
},
{
"2011-09-22" : [0, 0, 50],
customerID : "C1102",
ANI : 5678
}
];
var arr = [],
res = [],
csv = $.map(objRow, function (v, k) {
// items
arr.push(v.ANI, v.customerID, v[Object.keys(v)[0]]);
// arrays
var a = $.grep(arr, function (val, index) {
return $.isArray(val)
});
// strings
var s = arr.filter(function (i) {
return typeof i === "string"
});
// sort items
res.push([arr.filter(Number)[0]
, s[0]
, a.splice(0, 2).join(",")
, arr.filter(Number).slice(-1)[0]
, s.slice(-1)[0]
, a.join(",")]);
return res
}).slice(-1)[0];
// format text , html
csv = (csv.slice(0, 3) + "<br>" + csv.slice(-3))
.replace(/,/g, ", ");
$("body").append(csv)