Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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数组并将其重新格式化为JSON对象?_Javascript_Arrays_Json_Node.js_Google Analytics - Fatal编程技术网

如何读取javascript数组并将其重新格式化为JSON对象?

如何读取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

根据我给定的参数,我从Google Analytics API获取以下数据。这是一个JavaScript数组对象

[ [ '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];
}