Javascript转换数组

Javascript转换数组,javascript,Javascript,我有一系列谷歌分析数据: [ ["2016-01-01","google","335"], ["2016-01-01","bing","135"], ["2016-01-01","yahoo","35"], ["2016-01-02","google","145"], ["2016-01-02","bing","115"], ........... ] 它可以很大。获取以下两个阵列的最简单、最快的方法是什么 唯一日期值的数组: ["2016-01-01","2016-01-02","2016-

我有一系列谷歌分析数据:

[
["2016-01-01","google","335"],
["2016-01-01","bing","135"],
["2016-01-01","yahoo","35"],
["2016-01-02","google","145"],
["2016-01-02","bing","115"],
...........
]
它可以很大。获取以下两个阵列的最简单、最快的方法是什么

唯一日期值的数组:

["2016-01-01","2016-01-02","2016-01-03","2016-01-04"] - this is uniqe sorting date
按源对数据进行分组的对象数组:

[{
     source: 'google',
     data: [335, 145,.....] // lenght array=count unique date
}, {
    source: 'bing',
    data: [135, 115,.....]
}, ...
]

天真的实现:

var arr = [
["2016-01-01","google","335"],
["2016-01-01","bing","135"],
["2016-01-01","yahoo","35"],
["2016-01-02","google","145"],
["2016-01-02","bing","115"],
];

var new_arr = [];
var sources = {};

for(var i = 0; i < arr.length; i++){
    if ( sources[arr[i][1]] ){
        sources[arr[i][1]].data.push(arr[i][2])
    } else {
      sources[arr[i][1]] = {
        source: arr[i][1],
        data: [ arr[i][2] ],
      }
    }
}

for (var key in sources) {
   if (sources.hasOwnProperty(key)) {
      new_arr.push(sources[key]);
   }
}

console.log(new_arr);
var-arr=[
[“2016-01-01”、“谷歌”、“335”],
[“2016-01-01”、“必应”、“135”],
[“2016-01-01”,“雅虎”,“35”],
[“2016-01-02”,“谷歌”,“145”],
[“2016-01-02”、“必应”、“115”],
];
var new_arr=[];
变量源={};
对于(变量i=0;i
上面的代码将获得第二个数组。 第一个数组应该更容易获得,并且对您来说是一个很好的练习:)

如果您可以使用,那么它非常简单:

var数据=[
[“2016-01-01”、“谷歌”、“335”],
[“2016-01-01”、“必应”、“135”],
[“2016-01-01”,“雅虎”,“35”],
[“2016-01-02”,“谷歌”,“145”],
[“2016-01-02”、“必应”、“115”]
];
var first=uu.sortedUniq(data.map(x=>x[0]).sort());
var second=u0.entries(0.groupBy(数据,x=>x[1])).map(
e=>({来源:e[0],数据:e[1].map(d=>d[2])});
logs.innerText=JSON.stringify(第一个,null,2)+“\n”+JSON.stringify(第二个,null,2)

具有中间对象的解决方案

var数组=[“2016-01-01”、“谷歌”、“335”]、[“2016-01-01”、“必应”、“135”]、[“2016-01-01”、“雅虎”、“35”]、[“2016-01-02”、“谷歌”、“145”]、[“2016-01-02”、“必应”、“115”],
对象={},
键={},
唯一数据,
分组=[];
array.forEach(函数(a){
键[a[0]]=true;
object[a[1]]=object[a[1]]| |{};
对象[a[1]][a[0]]=a[2];
});
uniqueData=Object.keys(keys.sort();
分组=对象。键(对象)。映射(函数(k){
返回{
资料来源:k,
数据:uniqueData.map(函数(a){
返回对象[k][a]| | 0;
})
};
});
document.write(''+JSON.stringify(uniqueData,0,4)+'');

document.write(“”+JSON.stringify(分组,0,4)+“”)数据排序了吗?我不明白你想实现什么。。。是否要将日期提取到一个数组中,将其他数据提取到另一个包含对象(源、数据)的数组中?是的,我可以使用hightchart获取两个数组进行可视化