JS if_else中的for_each

时间:2019-02-22 22:07:11

标签: javascript arrays

我是编码领域的新手,刚刚开始学习javascript。我试图设计一种表的输出,但无法完成它。这是我要实现的目标

“ Jan-1-Quarter1”和第二行 “ 2月-2-季度1” ...等

我使用了foreachif/else并将它们组合在一起,但是却无法获得输出,可能是因为我们无法在if语句中添加foreach!有人可以帮我解决这里的问题吗?

const Months = ['jan','Feb']

if (Months = 'Jan'||'Apr'||'Jul'||'Sep') {
    Months.forEach(function(Month, index) {
    console.log(`${Month}--${index + 1}`)}
} else {
    console.log(`${Month}--${index + 1}`)
}

2 个答案:

答案 0 :(得分:1)

尚不清楚您要完成什么,但我想提供一些您在代码中看到的内容。由于您是新手,所以我了解您可能还不太熟悉该语言。

首先,if (Months = 'Jan'||'Apr'||'Jul'||'Sep')无论如何都将始终返回true,因为您犯了三个单独的错误!不用担心,让我为您分解一下。

第一个错误是您在Months ='Jan'中使用单个等号。单等号是所谓的ASSIGNMENT运算符。您将变量Months设置为等于字符串“ Jan”。您正在寻找的是STRICT EQUALITY运算符===,该运算符用于检查两件事是否相等。

请参阅此作为参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators

您的第二个错误是您正在查看整个Months变量,并试图将其值与字符串进行比较。如果您使用过像这样的严格相等:

if (Months === 'Jan')

它仍然会失败,因为Months是一个数组。您需要做的是使用Months.forEach遍历数组的每个元素,然后对每个月进行相等比较。

您的第三个错误是您使用OR运算符||的方式。

让我们看一下将解决前面两个错误的代码:

var months = ['Jan','Feb','Apr','Jul','Sep'];
months.forEach(element => {
  if (element === 'Jan' || 'Feb' || 'Mar'){
    console.log('Gotcha');
  }
});

这将始终返回true,因为将单独评估操作者或操作者所分别进行的操作。为了正确运行测试,您需要在每个部分中单独进行一个相等性测试,并用OR分隔。

运行以下代码片段并查看输出:

var foo = "Hi";

const test1 = (foo === "Boo" || "You");
const test2 = (foo === "Boo" || foo === "You");    

console.log(test1);
console.log(test2);

if (test1) {
  console.log("This is true??")
}

那么,那里发生了什么?

test1最终被分配了“ You”的值,因为第一部分的计算结果为false,因此它分配了第二部分。

如我们所料,

test2是错误的。

但是如果我们在test1上使用“ if”语句(当前设置为字符串“ You”)会发生什么?

为清楚起见,请查看此答案。 why does if("string") evaluate "string" as true but if ("string"==true) does not?

最后,您想要的是这样的东西:

var months = ['Jan','Feb','Apr','Jul','Sep'];
months.forEach(element => {
  if (element === 'Jan' || element === 'Feb') {
    console.log('woot');
  }
});

答案 1 :(得分:0)

您想要这个吗?用所需的数据创建一个数组。然后使用foreach遍历该数组?

var months = ['Jan','Feb','Apr','Jul','Sep'];
months.forEach(element => {
  console.log(element +  " - " + "quarter1");
});