如何读取javascript数组并将其重新格式化为JSON对象?
根据我给定的参数,我从Google Analytics API获取以下数据。这是一个JavaScript数组对象如何读取javascript数组并将其重新格式化为JSON对象?,javascript,arrays,json,node.js,google-analytics,Javascript,Arrays,Json,Node.js,Google Analytics,根据我给定的参数,我从Google Analytics API获取以下数据。这是一个JavaScript数组对象 [ [ '201801', '(Other)', '129' ], [ '201801', 'Direct', '2236' ], [ '201801', 'Email', '2' ], [ '201801', 'Organic Search', '6263' ], [ '201801', 'Referral', '185' ], [ '201801', 'Soc
[ [ '201801', '(Other)', '129' ],
[ '201801', 'Direct', '2236' ],
[ '201801', 'Email', '2' ],
[ '201801', 'Organic Search', '6263' ],
[ '201801', 'Referral', '185' ],
[ '201801', 'Social', '669' ],
[ '201802', '(Other)', '371' ],
[ '201802', 'Direct', '2037' ],
[ '201802', 'Email', '3' ],
[ '201802', 'Organic Search', '5790' ],
[ '201802', 'Referral', '162' ],
[ '201802', 'Social', '515' ],
[ '201803', '(Other)', '213' ],
[ '201803', 'Direct', '2465' ],
[ '201803', 'Organic Search', '8596' ],
[ '201803', 'Referral', '238' ],
[ '201803', 'Social', '356' ],
[ '201804', '(Other)', '65' ],
[ '201804', 'Direct', '1872' ],
[ '201804', 'Email', '1' ],
[ '201804', 'Organic Search', '9275' ],
[ '201804', 'Referral', '170' ],
[ '201804', 'Social', '307' ],
[ '201805', '(Other)', '35' ],
[ '201805', 'Direct', '2429' ],
[ '201805', 'Email', '2' ],
[ '201805', 'Organic Search', '8995' ],
[ '201805', 'Referral', '234' ],
[ '201805', 'Social', '341' ],
[ '201806', 'Direct', '51' ],
[ '201806', 'Organic Search', '282' ],
[ '201806', 'Referral', '1' ],
[ '201806', 'Social', '3' ] ]
如果不清楚,请检查以下要点:
在这个数组中,你可以看到像这样的'201801'。这意味着年份是2018,月份是1。它也在继续
通常在一个月内,我们会得到6个值,如(其他)、直接、电子邮件、有机搜索。转诊和社会服务。在此数组中,同一日期重复6次
我想做的是用它创建一个简单的JSON对象。这是我想要创建的格式,以便在AngularJS前端显示所有这些数据
[
{
"date" : "201801",
"(Other)" : "129",
"Direct" : "2236",
"Email" : "2",
"OrganicSearch" : "6263",
"Referral" : "185",
"Social" : "669"
},
{
"date" : "201802",
"(Other)" : "371",
"Direct" : "2037",
"Email" : "3",
"OrganicSearch" : "5790",
"Referral" : "162",
"Social" : "515"
}
]
我想要一个像这样的JSON数组。我试图找到重复的值,然后尝试将它们合并到一个JSON对象中(如果接近相同的元素)。许多这样的尝试。但还是不行。伙计们,现在真的很想得到你们的帮助。我不擅长数据分析和这类分类。请帮帮我。此项目使用Node.js 8.10.0完成。以下是如何获得所需输出的方法-
let数据=[
[‘201801’,‘其他’,‘129’],
['201801'、'Direct'、'2236'],
['201801','Email','2'],
['201801','Organic Search','6263'],
['201801','转诊','185'],
['201801'、'社会'、'669'],
['201802','(其他)','371'],
['201802','直接','2037'],
['201802','Email','3'],
['201802','Organic Search','5790'],
[201802',“转介”,“162'],
['201802','Social','515'],
[‘201803’,‘其他’,‘213’],
[201803]、“直接”、“2465”,
['201803','有机搜索','8596'],
[201803”,“转诊”,“238'],
[201803]、“社交”、“356”],
[‘201804’,‘其他’,‘65’],
['201804'、'Direct'、'1872'],
['201804','电子邮件','1'],
['201804','有机搜索','9275'],
[201804]、“转介”、“170”,
[201804]、“社交”、“307”],
[‘201805’,‘其他’,‘35’],
['201805'、'直接'、'2429'],
['201805','电子邮件','2'],
['201805','Organic Search','8995'],
[201805]、“转介”、“234”,
['201805'、'社会'、'341'],
[201806]、“直接”、“51”,
['201806','有机搜索','282'],
[201806”,“转介”,“1'],
['201806'、'社会'、'3']
];
让输出={};
data.map((值)=>{if(!output[value[0]]){output[value[0]]={};}output[value[0]]][value[1]]=value[2];})
log(Object.keys(output.map)(key=>{output[key][“date”]=key;返回output[key];}))代码>以下是获得所需输出的方法-
let数据=[
[‘201801’,‘其他’,‘129’],
['201801'、'Direct'、'2236'],
['201801','Email','2'],
['201801','Organic Search','6263'],
['201801','转诊','185'],
['201801'、'社会'、'669'],
['201802','(其他)','371'],
['201802','直接','2037'],
['201802','Email','3'],
['201802','Organic Search','5790'],
[201802',“转介”,“162'],
['201802','Social','515'],
[‘201803’,‘其他’,‘213’],
[201803]、“直接”、“2465”,
['201803','有机搜索','8596'],
[201803”,“转诊”,“238'],
[201803]、“社交”、“356”],
[‘201804’,‘其他’,‘65’],
['201804'、'Direct'、'1872'],
['201804','电子邮件','1'],
['201804','有机搜索','9275'],
[201804]、“转介”、“170”,
[201804]、“社交”、“307”],
[‘201805’,‘其他’,‘35’],
['201805'、'直接'、'2429'],
['201805','电子邮件','2'],
['201805','Organic Search','8995'],
[201805]、“转介”、“234”,
['201805'、'社会'、'341'],
[201806]、“直接”、“51”,
['201806','有机搜索','282'],
[201806”,“转介”,“1'],
['201806'、'社会'、'3']
];
让输出={};
data.map((值)=>{if(!output[value[0]]){output[value[0]]={};}output[value[0]]][value[1]]=value[2];})
log(Object.keys(output.map)(key=>{output[key][“date”]=key;返回output[key];}))代码>您可以将日期作为哈希表的键,并收集所有键值对。稍后仅获取对象数组的值
var数组=['201801'、'(其他)'、['201801'、'Direct'、'2236']、['201801'、'Email'、'2']、['201801'、'Organic Search'、'6263']、['201801'、'Reference'、'185']、['201801'、'Social'、'669']、['201802'、'Other'、'371']、['201802'、'Direct'、'2037']、['201802'、'Email'、'3']、['201802'、'Organic Search'、'5790'],[201802]、[201802]、[201802]、[201802]、[Social]、[515]、[201803]、[201803]、[201803]、[Direct]、[2465]、[201803]、[201803]、[201803]、[201804]、[201804]、[356]、[201804]、[201804]、[201804]、[1872]、[201804]、[201804]、[201804]、[1]、[201804]、[9275]、[,[201804]、[201804]、[201804]、[201804]、[201805]、[201805]、[201805]、[201805]、[201805]、[Direct]、[2429]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[Social]、[341]、[201806]、[201806]、[201806]、[Organic Search]、[282]、[201806]、[201806]、[1]、[1]、[,[201806]、“社交”、“3”],
结果=对象值(
array.reduce((r[date,key,value])=>{
r[date]=r[date]|{date};
r[日期][键]=值;
返回r;
}, {})
);
console.log(结果);
.as console wrapper{max height:100%!important;top:0;}
您可以将日期作为哈希表的键,并收集所有键值对。稍后仅获取对象数组的值
var数组=['201801'、'(其他)'、['201801'、'Direct'、'2236']、['201801'、'Email'、'2']、['201801'、'Organic Search'、'6263']、['201801'、'Reference'、'185']、['201801'、'Social'、'669']、['201802'、'Other'、'371']、['201802'、'Direct'、'2037']、['201802'、'Email'、'3']、['201802'、'Organic Search'、'5790'],[201802]、[201802]、[201802]、[201802]、[Social]、[515]、[201803]、[201803]、[201803]、[201803]、[Direct]、[2465]、[201803]、[201803]、[8596]、[201803]、[201803]、[238]、[2
const outputObj = ary.reduce((obj, subAry) => {
const [date, key, val] = subAry
obj[date] = obj[date] || {}
obj[date]['date'] = date
obj[date][key] = val
return obj
}, {})
console.log(Object.values(outputObj))
const data = [ [ '201801', '(Other)', '129' ],
[ '201801', 'Direct', '2236' ],
[ '201801', 'Email', '2' ],
[ '201801', 'Organic Search', '6263' ],
[ '201801', 'Referral', '185' ],
[ '201801', 'Social', '669' ],
[ '201802', '(Other)', '371' ],
[ '201802', 'Direct', '2037' ],
[ '201802', 'Email', '3' ],
[ '201802', 'Organic Search', '5790' ],
[ '201802', 'Referral', '162' ],
[ '201802', 'Social', '515' ],
[ '201803', '(Other)', '213' ],
[ '201803', 'Direct', '2465' ],
[ '201803', 'Organic Search', '8596' ],
[ '201803', 'Referral', '238' ],
[ '201803', 'Social', '356' ],
[ '201804', '(Other)', '65' ],
[ '201804', 'Direct', '1872' ],
[ '201804', 'Email', '1' ],
[ '201804', 'Organic Search', '9275' ],
[ '201804', 'Referral', '170' ],
[ '201804', 'Social', '307' ],
[ '201805', '(Other)', '35' ],
[ '201805', 'Direct', '2429' ],
[ '201805', 'Email', '2' ],
[ '201805', 'Organic Search', '8995' ],
[ '201805', 'Referral', '234' ],
[ '201805', 'Social', '341' ],
[ '201806', 'Direct', '51' ],
[ '201806', 'Organic Search', '282' ],
[ '201806', 'Referral', '1' ],
[ '201806', 'Social', '3' ] ];
const dataObj = data.reduce((all, [month, key, val]) => {
if (!all.hasOwnProperty(month)) all[month] = {};
all[month][key] = val;
return all;
}, {});
const result = Object.keys(dataObj).map(k => Object.assign({}, dataObj[k], {date: k}))
console.log(result);
const input = [
[ '201801', '(Other)', '129' ],
[ '201801', 'Direct', '2236' ],
[ '201801', 'Email', '2' ],
[ '201801', 'Organic Search', '6263' ],
[ '201801', 'Referral', '185' ],
[ '201801', 'Social', '669' ],
[ '201802', '(Other)', '371' ],
[ '201802', 'Direct', '2037' ],
[ '201802', 'Email', '3' ],
[ '201802', 'Organic Search', '5790' ],
[ '201802', 'Referral', '162' ],
[ '201802', 'Social', '515' ],
[ '201803', '(Other)', '213' ],
[ '201803', 'Direct', '2465' ],
[ '201803', 'Organic Search', '8596' ],
[ '201803', 'Referral', '238' ],
[ '201803', 'Social', '356' ],
[ '201804', '(Other)', '65' ],
[ '201804', 'Direct', '1872' ],
[ '201804', 'Email', '1' ],
[ '201804', 'Organic Search', '9275' ],
[ '201804', 'Referral', '170' ],
[ '201804', 'Social', '307' ],
[ '201805', '(Other)', '35' ],
[ '201805', 'Direct', '2429' ],
[ '201805', 'Email', '2' ],
[ '201805', 'Organic Search', '8995' ],
[ '201805', 'Referral', '234' ],
[ '201805', 'Social', '341' ],
[ '201806', 'Direct', '51' ],
[ '201806', 'Organic Search', '282' ],
[ '201806', 'Referral', '1' ],
[ '201806', 'Social', '3' ]
];
let output = [];
for (let i = 0; i < input.length; i++) {
let index = output.findIndex(obj => obj.date === input[i][0]);
if (index === -1) {
index = output.length;
output[index] = {date: input[i][0]};
}
output[index][input[i][1]] = input[i][2];
}