重新排列javascript数组/对象
我正试图重新安排:重新排列javascript数组/对象,javascript,arrays,json,sorting,object,Javascript,Arrays,Json,Sorting,Object,我正试图重新安排: [ {"Appointment":"6","Converted":"0","Lead":"9","Qualified":"0","Dead":"0"}, {"Appointment":"1","Converted":"0","Lead":"1","Qualified":"0","Dead":"0"}, {"Appointment":"1","Converted":"0","Lead":"0","Qualified":"0","Dead":"0"} ]
[
{"Appointment":"6","Converted":"0","Lead":"9","Qualified":"0","Dead":"0"},
{"Appointment":"1","Converted":"0","Lead":"1","Qualified":"0","Dead":"0"},
{"Appointment":"1","Converted":"0","Lead":"0","Qualified":"0","Dead":"0"}
]
致:
通过执行for(obj中的var prop)循环,我成功地获得了5个具有正确名称的数组,但我想知道如何实现数据部分的转换。也许是一厢情愿的想法,但是有没有比在循环中循环更简单的方法呢
解决方案必须是动态的。。。可以有3个类似于我的示例中的数组,或者更多或更少。但是,属性的数量将始终增加5,如示例所示。将结果设置为键为名称的对象,因为更容易查找:
var result = {};
for (var key in input[0]) {
result[key] = [];
}
for (var i = 0; i < input.length; i++) {
var obj = input[i];
for (key in obj) {
result[key].push(parseInt(obj[key], 10));
}
}
您可以将对象中的键分组,然后放入数组中。。。就像在小提琴里
此解决方案适用于输入的任何数据集类别的数量是否固定?5在你的情况下,好的,我已经编辑了我的问题,谢谢。我不会使用数组作为结果。如果您使用的对象的键是名称,则会更容易,例如,
{“约会”:[6,1,1],“转换”:[0,0,0],…}
不幸的是,结果必须采用所示格式,因为它将在HighChart图中使用……您需要数字吗?(配对前+配对后容易忽略的差异)JSOP中没有foreach可能也会清理新添加的隐式全局,因为其他应用有时依赖预定义的窗口。name…我会添加result[name].map(Number)以符合OP所需的输出,但通常情况下,类型并不重要,因此它可能适用于图表…我甚至没有注意到输入的数字是字符串,我添加了parseInt
。谢谢,我尝试在这上面使用parseInt(),但没有用。。。显然,我还有很多东西要学JS。这是解决这个问题的关键:result_array.push({name:name,data:result[name]});非常感谢,太好了。这两个答案都是正确的,但您首先得到了答案,数据结果是一个整数而不是字符串,非常感谢:)。
var result = {};
for (var key in input[0]) {
result[key] = [];
}
for (var i = 0; i < input.length; i++) {
var obj = input[i];
for (key in obj) {
result[key].push(parseInt(obj[key], 10));
}
}
var result_array = [];
for (var name in result) {
result_array.push({name: name, data: result[name]});
}
var data = [
{"Appointment":"6","Converted":"0","Lead":"9","Qualified":"0","Dead":"0"},
{"Appointment":"1","Converted":"0","Lead":"1","Qualified":"0","Dead":"0"},
{"Appointment":"1","Converted":"0","Lead":"0","Qualified":"0","Dead":"0"}
]
function groupByKey(data){
var grouped = {};
var result = [];
data.forEach(function(row){
for(var property in row){
if(!(property in grouped)){
grouped[property] = [];
}
grouped[property].push(+row[property]);
}
});
for(var property in grouped){
result.push({
name: property,
data: grouped[property]
});
}
return result;
}
var groupedData = groupByKey(data));