我有这段代码可以迭代一组选定的天数,如果今天是所选集合的一部分,我应该响true
。但是,isDay
响铃false
,无论daysChosen
或today
恰好是什么。那我在这里错过了什么?..
var date = new Date;
var isDay;
var today=date.toString().substring(0,4)
//console.log(today)//good
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu'])
{
console.log(daysChosen)//good
isDay = today==daysChosen ? true : false
}
console.log(isDay)//bad, should be true if today is part of daysChosen
更新
好的,这是一些BULL **** !!! ......鉴于today
在数组中,这个地球如何评估为真!?...
for (var value of ['Sun','Mon','Tue','Wed','Thu','Fri'])
{
var _day = (today!=value) ? true : false
break;
}
console.log(_day)
答案 0 :(得分:2)
当isDay
变为true
时,您的循环会继续循环,并且在下一次迭代中可以为其分配false
。您可以使用break
语句退出循环:
var isDay = false;
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu'])
{
if (today == daysChosen) {
isDay = true;
break;
}
}
您还可以使用Array.prototype.find()函数检查数组是否包含today
。 (!!
是双重否定):
var isDay = !!['Sun','Mon','Tue','Wed','Thu'].find(function(day) {
return day === today;
})
不幸的是find
对所有浏览器都不是compatible。
答案 1 :(得分:2)
您的代码中存在一些导致问题的主要问题。
public class ParticleField extends JTextField{
private static final long serialVersionUID = -2181907591904112074L;
public static int M = 0;
public static int X = 1;
public static int Y = 2;
public static int XV = 3;
public static int YV = 4;
public static int XP = 5;
public static int YP = 6;
public static final Font FONT = new Font("SansSerif", Font.BOLD, 24);
public Particle p;
public int type;
public boolean isSelected = false;
public boolean wasSelected = false;
public ParticleField(Particle p, int t){
this.p = p;
this.type = t;
setHorizontalAlignment(JTextField.CENTER);
setFont(FONT);
getDocument().addDocumentListener(new txtDocumentListener(this));
addFocusListener(new txtBoxListener());
getParticleData();
}
public Particle getP(){
return p;
}
public void setParticleData(){
switch (type) {
case 0: p.setM(Double.parseDouble(getText())); break;
case 1: p.setXM(Double.parseDouble(getText())); break;
case 2: p.setYM(Double.parseDouble(getText())); break;
case 3: p.setXVM(Double.parseDouble(getText())); break;
case 4: p.setYVM(Double.parseDouble(getText())); break;
case 5: getParticleData(); break;
case 6: getParticleData(); break;
}
}
public void getParticleData(){
setText("swag");
switch (type) {
case 0: setText(String.format("%.2f",p.getM())); break;
case 1: setText(String.format("%.2f",p.getXM())); break;
case 2: setText(String.format("%.2f",p.getYM())); break;
case 3: setText(String.format("%.2f",p.getXVM())); break;
case 4: setText(String.format("%.2f",p.getYVM())); break;
case 5: setText(String.format("%.2f",p.getXPM())); break;
case 6: setText(String.format("%.2f",p.getYPM())); break;
}
}
public class txtBoxListener implements FocusListener {
@Override
public void focusGained(FocusEvent e) {
ParticleField t = (ParticleField) e.getSource();
t.isSelected = true;
}
@Override
public void focusLost(FocusEvent e) {
ParticleField t = (ParticleField) e.getSource();
t.isSelected = false;
t.setParticleData();
}
}
}
- 天数是3个字符,所以你最后得到了额外的空间。 var today=date.toString().substring(0,4)
,注意额外的空间。
一旦找到正确的值,你就不会突破你的循环,正如其他答案所指出的那样。
您只需使用today === "Sun "
方法即可。它返回给定字符串的索引,如果它不包含在数组中,则返回-1。
indexOf
或修复现有代码:
var date = new Date();
// first 3 characters from string for day of week
var today = date.toString().substring(0,3);
var days = ['Sun','Mon','Tue','Wed','Thu'];
var isInDays = days.indexOf(today) > 0; // indexOf returns -1 if not contained
答案 2 :(得分:0)
如果你有一系列的东西,并想检查它是否有东西,我会在数组上使用新的.includes()
属性:
["Sun", "Mon", "Tue", "Wed", "Thu"].includes(today);
此外,不是从字符串输出中提取星期几,而是使用Date.prototype.getDay()
。
如果您不想加入polyfill,可以使用我从Codegolf.SE学到的这个技巧:
~["Sun", "Mon", "Tue", "Wed", "Thu"].indexOf(today);
~
是二进制NOT运算符,它将数据类型中的位转换为相反的位。当没有搜索项的实例时,从.indexOf()
返回的二进制NOT为-1。在JavaScript中有一个称为强制的概念,这意味着当有类型的时候不和谐,就像添加布尔值一样,有一种类型的值会转换为另一种类型。例如,所有非零的数字都被强制转换为true
,0
强制转换为false
。因此,如果您将上述文本放入if
语句中,它将表现为.includes()
。
更好的方法
您从Date.toString()
中提取星期几,这不是一个好习惯。考虑使用数组访问和Date.prototype.getDay()
来使流程更合理:
let today = new Date().getDay();
// Sun., Mon., Tue., etc.
if ([true, true, true, true, true, false, false][today]) {
// Day is matched
} else {
// Day is not matched
}
这有一些优点