首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决多维数组中的“水喝日大于每周4天的回归真”问题?

如何解决多维数组中的“水喝日大于每周4天的回归真”问题?
EN

Stack Overflow用户
提问于 2022-09-14 18:13:37
回答 2查看 51关注 0票数 -1

修复函数adequateWaterTracker。如果日历数组中的所有周都有比没有喝水的时间更长的时间,那么adequateWaterTracker应该返回true。

例如,在这个星期,0,0,3,1,0,4,0,每天代表你那天喝了多少杯水。在这个例子中,只有3天你至少喝了一杯水。

日历由多周表示,[0,0,3,1,0,4,0,1,2,1,2,1,3,1]。

如果你在日历上每周至少喝4天水,那就返回真水。否则,返回false。

我知道我应该添加这样的语句,如果每周水计数器比它多4会返回真。但我做不到。我应该把它加到哪里,怎么加?

代码语言:javascript
复制
function adequateWaterTracker(calendar) {
  let noWater = 0;
  let water = 0;
debugger
  for (let i = 0; i < calendar.length; i++) {
    const week = calendar[i];
    for (let j = 0; j < week.length ; j++) {
      const day = week[j];
      if (day=== 0 ) {
        noWater++;
      } else {
        water++;
      }

    }

  }
return noWater < water
}

const calendar1 = [
  [0, 0, 3, 1, 0, 4, 0],
  [1, 2, 1, 2, 1, 3, 1],
];

console.log(adequateWaterTracker(calendar1)); // false

const calendar2 = [
  [1, 1, 1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0, 1, 1],
];

console.log(adequateWaterTracker(calendar2)); // false

const calendar3 = [
  [1, 1, 1, 1, 0, 0, 0],
  [1, 1, 1, 1, 0, 0, 0],
];

console.log(adequateWaterTracker(calendar3)); // true
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-14 18:33:28

您可以使用every方法来检查所有周数组是否都达到了特定的条件,并且在每个星期数组上,您可以通过filter过滤多个或等于一个的天数,然后得到数组的长度并检查它是否等于或大于4。

代码语言:javascript
复制
const adequateWaterTracker = (calendar) => calendar.every(w => w.filter((d) => d >= 1).length >= 4)

const calendar1 = [
  [0, 0, 3, 1, 0, 4, 0],
  [1, 2, 1, 2, 1, 3, 1],
];

console.log(adequateWaterTracker(calendar1)); // false

const calendar2 = [
  [1, 1, 1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0, 1, 1],
];

console.log(adequateWaterTracker(calendar2)); // false

const calendar3 = [
  [1, 1, 1, 1, 0, 0, 0],
  [1, 1, 1, 1, 0, 0, 0],
];

console.log(adequateWaterTracker(calendar3)); // true

票数 3
EN

Stack Overflow用户

发布于 2022-11-05 11:17:15

您可以简单地使用布尔状态,这里我使用prevRow来保持对上一行的检查,我们知道,在迭代内部数组之后,我们需要检查noWater < water?对吧?因此,我们可以在内部for循环的外部添加if块并进行检查。

  • 如果noWater < prevRow = false并破坏
  • 或重置 noWater和and为下一次迭代

`

代码语言:javascript
复制
function adequateWaterTracker(calendar) {
    let noWater = 0;
    let water = 0;
    let prevRow = true;
    for (let i = 0; i < calendar.length; i++) {
        const week = calendar[i];
        for (let j = 0; j < week.length; j++) {
            const day = calendar[i][j];
            if (day === 0) {
                noWater++;
            } else {
                water++;
            }
        }
        // check
        if (noWater > water) {
            prevRow = false;
            break;
        }
        noWater = 0;
        water = 0;
    }
    return prevRow;
}

`

由mina给出的解决方案看起来真的很好,并且遵循了函数方法

  • 作为初学者友好的方法,在这里添加了我的输入,尽管我花了一些时间才弄清楚它,希望它能够实现,关键的学习部分是使用布尔状态,并理解在循环中应该如何重置值。

谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73721483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档