首页 > 解决方案 > 如何从 Javascript 中的对象列表中记录一组值?

问题描述

我有几天的数组,每天分为 30 分钟的块,其中每个块都是一个对象数组。我想获取每个块的键“wake”的值。如果wake 为假然后为真,我想将1 加到名为sleepFrag 的变量中,如果“wake”为假,我想将30 加到名为sleepPeriod 的变量中。我想控制台记录我的两个变量 sleepPeriod 和 sleepFrag。

这就是我要读取的列表的样子(我只包括两天的两个小时,每个“块”分为 24 小时,我不知道有多少天):

 days = [
{
chunks: [
  {
    BM: 1,
    ID: 0,
    hour: "00",
    issue: 0,
    mealP: 30,
    timeMins: "00",
    wake: true
  },
  {
    BM: 0,
    ID: 1,
    hour: "00",
    issue: 0,
    mealP: 30,
    timeMins: "30",
    wake: true
  },
  {
    BM: 0,
    ID: 2,
    hour: "01",
    issue: 0,
    mealP: 0,
    timeMins: "00",
    wake: false
  },
  {
    BM: 0,
    ID: 3,
    hour: "01",
    issue: 3,
    mealP: 0,
    timeMins: "30",
    wake: false
  }

    ],
epoch: 1563163200
},
{
chunks: [
  {
    BM: 0,
    ID: 0,
    hour: "00",
    issue: 0,
    mealP: 0,
    timeMins: "00",
    wake: true
  },
  {
    BM: 0,
    ID: 1,
    hour: "00",
    issue: 0,
    mealP: 0,
    timeMins: "30",
    wake: true
  },
  {
    BM: 0,
    ID: 2,
    hour: "01",
    issue: 0,
    mealP: 0,
    timeMins: "00",
    wake: true
  },

等等

这是我已经尝试过的:

function getSleep(daysIn){
    sleepFrag = 0
    sleepPeriod = 0
    for (chunk=0; chunk < days.length; chunk++){
        for(element=0; element< days[chunk].length; element++){
            if(days[element-1].wake==false)&&(days[element].wake==true){
                sleepFrag+=1
            }
            else if (days[element].wake==false){
                sleepPeriod+=30
            }

        }
        console.log("this is the sleep amount for day"+chunk+":"sleepPeriod)
        console.log("this is the number of sleep fragments for day"+chunk+":"sleepFrag)
    }
    console.log("this is the total number of sleep fragments :"+sleepFrag)
    console.log("this is the total amount of sleep :"+sleepPeriod)
}
console.log("sleep fragments and sleep periods")
getSleep(days)

我在控制台上没有日志,也没有错误。我希望得到:

睡眠片段和睡眠时间

这是当天的睡眠量(代表当天的“块”):(当天的睡眠时间)

这是当天的睡眠片段数(代表当天的“块”):(当天的 sleepFrag)

这是睡眠碎片的总数:(睡眠碎片的数量)这是睡眠的总量:(睡眠的数量)

标签: javascriptarraysobjectlogging

解决方案


你的函数的逻辑其实是对的。。但是代码写得很差。。没有var声明,没有分号(;)等。这里是精炼的函数:

function getSleep(daysIn){
    var sleepFrag = 0
    var sleepPeriod = 0
    for (var i=0; i < daysIn.length; i++){
        var day = daysIn[i];
        var chunksOfTheDay = day.chunks;
        for(var j=1; j < chunksOfTheDay.length; j++){
            if((chunksOfTheDay[j-1].wake === false) && (chunksOfTheDay[j].wake === true)){
                sleepFrag+=1
            }
            else if (chunksOfTheDay[j].wake === false){
                sleepPeriod+=30
            }

        }
        console.log("this is the sleep amount for day"+i+":"+sleepPeriod);
        console.log("this is the number of sleep fragments for day"+i+":"+sleepFrag);
    }
    console.log("this is the total number of sleep fragments :"+sleepFrag);
    console.log("this is the total amount of sleep :"+sleepPeriod);
}
console.log("sleep fragments and sleep periods");
getSleep(days);

推荐阅读