【问题标题】:Combining arrays, loops and if statements组合数组、循环和 if 语句
【发布时间】:2017-05-18 14:48:26
【问题描述】:

我试图了解如何组合应用数组、循环和 if 语句。我已经创建了一个工作日数组,我想指定在特定的一天应该分配特定的锻炼。我还想打印出分配的日期和练习。正如您将在下面的代码中看到的那样,使用weekday.push() 方法分配隔日游泳或重量训练,根本不添加瑜伽并创建 14 个值。你能否建议如何处理这个问题。谢谢!

var weekday = ['Sun', 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat'];
var workOut = [];

function myExercise() {
  for (var i = 0; i < weekday.length; i++) {
    if (weekday == 'Wed' || 'Mon' || 'Fri') {
      workOut.push('Swimming');
    }
    if (weekday == 'Tue' || 'Thur' || 'Sat') {
      workOut.push('weight training');
    } else {
      workOut.push('Yoga' + 'or' + 'power walking');
    }
  }
}

myExercise();
console.log(workOut);

【问题讨论】:

  • 不回答您的问题,但仅供参考,而不是if,您可以使用switch
  • 这里一定要用开关
  • 不确定在这种情况下切换是否会有所帮助。您要么需要每天硬编码workOut.push(),要么奇怪地订购案例(周一、周三、周五、周二、周四、周六)以重叠案例。

标签: javascript arrays for-loop if-statement


【解决方案1】:

不幸的是,您不能像在 if 子句中尝试的那样使用快捷方式。你也忘记了迭代器[i]。除了正常的

if (weekday[i] == 'Wed' || weekday[i] == 'Mon' ||  weekday[i] == 'Fri')

您也可以使用以下形式:

if ( ['Wed','Mon','Fri'].includes(weekday[i]))

如果您想支持 IE(不支持 includes),您可以使用 indexOf

当您想要检查大量值时,这很方便。总之,你可以这样写:

注意,我还将您的第二个 if 更改为 else if(这是 14 个条目的原因)并使用了 Array.prototype.map 函数。此外,操作不属于您的范围的对象是一个坏习惯(锻炼在全局范围内,但被myExercise 函数操作)。最好返回想要的结果,然后做一个简单的赋值。

var weekday = ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'];
var workOut = [];

function myExercise() {

  return weekday.map(function(day){
      var workout;
      if (['Mon','Wed','Fri'].includes(day)){
        workout = "Swimming";
      } else if (['Tue','Thur','Sat'].includes(day)){
        workout = "Weight training";
      } else {
        workout = 'Yoga or power walking';
      }
      return workout;
  });
}

workOut = myExercise();
console.log(workOut);

【讨论】:

  • includes() 是否得到广泛支持?
  • @IvankaTodorova 我为 IE 用户添加了一个替代方案;)
  • day 指的是数组的元素,就像workout[i] 一样。看看我的回答中的地图文档,在那里你可以找到回调函数的参数是callback(currentValue,index,array)
  • 根据您想要的格式,您可以从myExercise 函数返回一个连接字符串:return day+": "+workout; 或类似return [day,workout]; 的对象或数组。在这里为你加班,然后你接受另一个答案,ts;-)
【解决方案2】:

修改了你的代码,有拼写错误和条件重叠

var weekday = ['Sun', 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat'];
var workOut = [];

function myExercise() {
  for (var i = 0; i < weekday.length; i++) {
  console.log(weekday[i] )
    if (weekday[i] == 'Wed' || weekday[i] == 'Mon' || weekday[i] == 'Fri') {
      workOut.push('Swimming');
    }
    else{
    if (weekday[i] == 'Tues' || weekday[i] == 'Thur' || weekday[i] == 'Sat') {
      workOut.push('weight training');
    } else {
      workOut.push('Yoga' + 'or' + 'power walking');
    }
    }
  }
}

myExercise();
console.log(workOut);
VM280:18 

【讨论】:

    【解决方案3】:

    var weekdays = ['Sun', 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat'];
    var workouts = weekdays.map(day => {
      switch (day) {
        case 'Wed':
        case 'Mon':
        case 'Fri':
          return 'Swimming';
          break;
        case 'Tues':
        case 'Thur':
        case 'Sat':
          return 'weight training';
          break;
        default:
          return 'Yoga or power walking';
          break;
      }
    });
    
    console.log(workouts);

    【讨论】:

    • 谢谢!一个问题,这里的“(天)”是什么意思?
    • 当您使用 map 方法遍历数组时,在数组中的每个项目上调用的函数需要两个参数:第一个是当前项目(我称之为 day,因为weekdays 数组中的项目都是days),第二个是当前索引。我们的代码中不需要索引,所以我把它省略了。请参阅Array.prototype.map() on MDN switch 使用 (day) 来比较案例。基本上:If (day === 'Wed' || day === 'Mon' || day === 'Fri')
    • 知道了!再次感谢您的帮助!
    【解决方案4】:

    之前的答案中已经有 switch 语句,但我也包括了这个。它可能不是 DRY,但对于初学者来说更容易理解:

    var weekday = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
    var workOut = [];
    
    function myExercise() {    
        for (var i = 0; i < weekday.length; i++) {
            switch(weekday[i]) {
                case 'Sun':
                    workOut.push('Yoga' + 'or' + 'power walking');
                    break;
                case 'Mon':
                    workOut.push('Swimming');
                    break;
                case 'Tue':
                    workOut.push('weight training');
                    break;
                case 'Wed':
                    workOut.push('Swimming');
                    break;
                case 'Thu':
                    workOut.push('weight training');
                    break;
                case 'Fri':
                    workOut.push('Swimming');
                    break;
                case 'Sat':
                    workOut.push('weight training');
                    break;
                    default:
                    workOut.push('Sleep!!');
            }
        }
    }
    
    myExercise();
    console.log(workOut);
    

    【讨论】:

    • 我认为您应该始终*将具有相同结果的案例组合在一起,您不同意吗?
    • 我绝对同意。但正如我所提到的,这对于初学者来说可能更容易理解。
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多