遍历javascript对象数组中的多个变量

遍历javascript对象数组中的多个变量,javascript,jquery,arrays,Javascript,Jquery,Arrays,我无法理解下面的内容,希望有人能把我带到正确的方向 对于社交媒体分析,我想创建一个散点图,显示你每天和每小时收到的喜欢的数量,这样你就可以知道什么是发布到社交媒体的好时机 我得到了一个对象数组,其中包含了每个帖子的所有信息,比如:一天(0-6),几小时(0-23),喜欢的次数。看起来像这样: var posts_array = [{caption: "hello", day: 0, hours: 2 ,likes:200}, {caption: "hello2",

我无法理解下面的内容,希望有人能把我带到正确的方向

对于社交媒体分析,我想创建一个散点图,显示你每天和每小时收到的喜欢的数量,这样你就可以知道什么是发布到社交媒体的好时机

我得到了一个对象数组,其中包含了每个帖子的所有信息,比如:一天(0-6),几小时(0-23),喜欢的次数。看起来像这样:

var posts_array = [{caption: "hello", day: 0, hours: 2 ,likes:200},
                {caption: "hello2", day: 0, hours: 1, likes: 100}];
为了绘制散点图,我需要一组如下所示的对象:

var array_objects = [{day: 0, hours:0, sum_of_likes: somenumber},{day:0,
           hours:1, sum_of_likes: somenumber}] 
我的计划是创建一个包含日期、小时和喜欢次数的对象数组。然后循环浏览每一篇文章、每一天、每一小时,将喜欢的数量添加到正确的对象中

到目前为止,我得到了这个:

//create array of objects for each day and hour
var array_objects = [];
for (var i = 0; i < 7; i++) {
    for (var j = 0; j < 24; j++) {
        var object = new Object();
        object.day = i;
        object.likes = 0;
        object.timeslot = j;
        array_objects.push(object);

    }
}

//loop through each day and hours

for (var i = 0; i < posts_array.length; i++) { //loop through all posts

    for (var j = 0; j < 7; j++) { //loop through each day
        if (posts_array[i].day == j){ 
            for (var k = 0; k < 24; k++) { //loop through each hour of day
                if(posts_array[i].hours == k){

                    //how to get object reference?
                }   
            }
        }   
    }
}
//为每天和每小时创建对象数组
var数组_objects=[];
对于(变量i=0;i<7;i++){
对于(var j=0;j<24;j++){
var object=新对象();
object.day=i;
object.likes=0;
object.timeslot=j;
数组_objects.push(object);
}
}
//循环浏览每一天和每一小时
对于(var i=0;i

但最后我很难找到物体的参照物。我还想知道这是否是正确的方法,因为这样做似乎有点乏味。

好吧,因为你的数组对象是一维的,按照你的制作方式,你可以做:

if(posts_array[i].hours == k){
    var reference = array_objects[j * 24 + k];
}
不过,这样做要好得多:

for (var i = 0; i < posts_array.length; i++) {
    var reference = array_objects[posts_array[i].day * 24 + posts_array[i].hours];
}
for(var i=0;i
在进行过程中更容易合并数据。您可以为此目的创建词典词典

array_objects = {}
for (var i = 0; i < posts_array.length; i++) {
    var temp = post_array[i]
    if array_objects[temp.day+"_"+temp.hours] {
        array_objects[temp.day+"_"+temp.hours][sum_of_likes] += temp.likes
    } else {
        array_objects[temp.day+"_"+temp.hours] = {day: temp.day, hours: temp.hours, sum_of_likes: temp.likes}
    }
}
array_objects={}
对于(var i=0;i
为了解决这个问题,我建议如下:

let scatter_objects = [];
Array.prototype.forEach.call(post_array, (post)=>{
    let keys = Object.keys(post);
    keys.forEach((key, index, array)=>{
        // the arguments are passed for each post object; array is the original post object
       // here key is the property like day, hour, likes
       // you can now filter each post by key and return an object that 
       // the end result would be a filtered object pushed to the 
       // scatter_objects array
       // at the end,
       scatter_objects.push(processed_object);
    });

});

for循环
之前没有声明
posts\u数组
。很抱歉,您是对的,只更新了post。posts_数组是包含所有帖子的数组-参见上面的示例非常感谢!我不知道这是否是最有效的方法,但它确实对我有效。谢谢你的帮助!有很多方法可以简化这个代码;例如,juvian的代码消除了存储键和值的需要,这将节省空间和时间。但是,这需要您为每天的每小时设置值,因此根据您的数据,创建字典可能更有效。此外,在读取数据时合并数据通常比创建两个循环更有效,一个用于读取数据,另一个用于合并数据。