在D3.JS或javascript / jquery中有没有办法做到这一点:
我有一个数组数组..
[
[{date:x,data:1},{date:x,data:9}],
[{date:y,data:5},{date:y,data:10},{date:y,data:8}],
[{date:z,data:2},{date:z,data:5}]
]
我想重新排列它们,以便这个顶级数组中的数组都具有相同的日期:
$(function(){
$("#myform").on("change", "input", function(){
status=($("#myform").find("input:checked").length==0)?"disabled":"";
$("button").prop("disabled", status);
})
})
答案 0 :(得分:2)
d3非常简单:
xs = [
[{date: 'x', data: 1}, {date: 'y', data: 5}, {date: 'z', data: 2}],
[{date: 'x', data: 9}, {date: 'y', data: 10}],
[{date: 'y', data: 8}, {date: 'z', data: 5}]
]
z = d3.nest()
.key(x => x.date)
.sortKeys(d3.ascending)
.entries(d3.merge(xs))
.map(x => x.values)
z.map(e => document.write('<pre>'+JSON.stringify(e)+'</pre>'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
答案 1 :(得分:0)
使用纯javascript
var x = 'x', y = 'y', z = 'z';
var arr = [
[{ date: x, data: 1 }, { date: y, data: 5 }, { date: z, data: 2 }],
[{ date: x, data: 9 }, { date: y, data: 10 }],
[{ date: y, data: 8 }, { date: z, data: 5 }]
];
var res = arr.reduce(function (result, inArr, index) {
inArr.forEach(function (obj) {
result[obj.date] = result[obj.date] || [];
result[obj.date].push(obj);
});
return result;
}, {});
var output = [];
for (var key in res) {
output.push(res[key]);
}
console.log(output);
将输出
[
[
{
"date": "x",
"data": 1
},
{
"date": "x",
"data": 9
}
],
[
{
"date": "y",
"data": 5
},
{
"date": "y",
"data": 10
},
{
"date": "y",
"data": 8
}
],
[
{
"date": "z",
"data": 2
},
{
"date": "z",
"data": 5
}
]
]
答案 2 :(得分:0)
你可以在没有任何lib的情况下做到这一点:
1)使用键date
2)按键分组
3)创建结果集
4)完成
arr=[
[{date:'x',data:1},{date:'y',data:5},{date:'z',data:2}],
[{date:'x',data:9},{date:'y',data:10}],
[{date:'y',data:8},{date:'z',data:5}]
]
function group(a){
return arr.reduce(function(o,n){
n.forEach(function(a){
var key=a.date;
if(!o[key]) o[key]=[];
var tmp=o[key];
tmp.push(a);
o[key]=tmp;
});
return o;
},{});
}
var resultMap = group(arr);
var result = Object.keys(resultMap).map(
function(x){
return resultMap[x];
}
);
console.log(result)
这里是Fiddle。
Array.prototype.reduce()
解释为here
Array.prototype.map()
解释为here