Javascript转换数组
Javascript convert array
我有一组谷歌分析数据:
[
["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 array = [["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"]],
object = {},
keys = {},
uniqueData,
grouped = [];
array.forEach(function (a) {
keys[a[0]] = true;
object[a[1]] = object[a[1]] || {};
object[a[1]][a[0]] = a[2];
});
uniqueData = Object.keys(keys).sort();
grouped = Object.keys(object).map(function (k) {
return {
source: k,
data: uniqueData.map(function (a) {
return object[k][a] || 0;
})
};
});
document.write('<pre>' + JSON.stringify(uniqueData, 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');
一个简单的实现:
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);
上面的代码为您提供了第二个数组。第一个数组应该更容易获得,对您来说是一个很好的练习:)
如果你可以使用lodash,那么它很简单:
var data = [
["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 first = _.sortedUniq(data.map(x => x[0]).sort());
var second = _.entries(_.groupBy(data, x => x[1])).map(
e => ({ source: e[0], data: e[1].map(d => d[2]) }) );
logs.innerText = JSON.stringify(first, null, 2) + "'n" + JSON.stringify(second, null, 2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.11.1/lodash.min.js"></script>
<pre id="logs"></pre>
相关文章:
- 使用JS将数组转换为json对象
- 本地存储中的字符串到字节数组转换
- Javascript函数,用于将数组转换为“;2-元组”;
- php数组转换为javascript
- 在Javascript中将一个值和字符串数组转换为if语句
- 将数组转换为javascript格式的字符串
- 如何将数组转换为有效的json
- JSON数组转换为JS对象数组
- 如何将数组转换为映射
- JavaScript:将字符串数组转换为文本区域
- javascript |数组转换
- 数组转换为多个字符串
- Javascript将数组转换为字符串并使其反向输出
- 将Byte数组转换为Angularjs中的Base64字符串
- 将对象数组转换为与nodejs/pg/unnest兼容的数组
- 将Javascript数组转换为PHP数组
- 将数组转换为键值对
- 使用Ramda将对象数组转换为普通对象
- javascript将对象数组转换为字符串以存储在s3中
- 使用.join方法将数组转换为不带逗号的字符串