Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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数组/对象_Javascript_Arrays_Json_Sorting_Object - Fatal编程技术网

重新排列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));