2016-08-14 5 views
0

오늘 선택한 세트를 반복하고 오늘 선택한 세트의 일부인 경우 true을 호출해야하는 코드 조각이 있습니다. 그러나 isDaydaysChosen 또는 today과 관계없이 false 반지. 그래서 나는 여기에 놓치고 ..요일 반복

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 

업데이트 : 좋아,이 몇 가지 황소 **** !!! ...이 true로 평가 할 수있는 방법 지구에 today 주어진 것입니다

for (var value of ['Sun','Mon','Tue','Wed','Thu','Fri']) 
    {  
     var _day = (today!=value) ? true : false 
     break; 
    } 
console.log(_day) 
+1

,'isDay = 오늘 == daysChosen 후'루프를? true : false' 또는 true 일 경우에만 'Thu' – RononDex

+0

lol "ring'true'" "rings'false'"발명품! 나는 그것을 좋아한다. –

답변

2

코드에서 문제를 일으키는 몇 가지 주요 문제가 있습니다.

  1. var today=date.toString().substring(0,4) - 요일은 3 자이므로 마지막에 여분의 공간이 생깁니다. today === "Sun ", 여분의 공간을 확인하십시오.

  2. 다른 답변이 지적한 바대로 올바른 값을 찾으면 루프가 깨어지지 않습니다.


당신은 단순히 indexOf 방법을 사용할 수 있습니다. 지정된 문자열의 색인을 반환하거나 배열에없는 경우 -1을 반환합니다.

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 

또는 기존의 코드 수정 :

var date = new Date; 
var isDay; 
var today=date.toString().substring(0,3) 
//console.log(today)//good 
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu']) 
{ 
    console.log(daysChosen)//good 
    isDay = today==daysChosen ? true : false 
    if(isDay) break; // must break once you find it or you will keep overriding the value. 
} 
당신이 '중단해야합니다
2

루프가 isDaytrue이되고 다음 반복에에 false을 할당 할 수있을 때 반복 계속 ... 배열!?입니다. 또한 배열이 today이 포함되어 있는지 확인하는 Array.prototype.find() 기능을 사용할 수 있습니다

var isDay = false; 
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu']) 
{ 
    if (today == daysChosen) { 
     isDay = true; 
     break; 
    } 
} 

: 당신은 루프를 종료 break 문을 사용할 수 있습니다. (!! 이중 부정이다) :

var isDay = !!['Sun','Mon','Tue','Wed','Thu'].find(function(day) { 
    return day === today;   
}) 

불행하게도 find 모든 브라우저와 compatible 없습니다.

+0

다른 해결책이 있습니까? 위의 작업 중 어느 것도 작동하지 않습니다. https://jsfiddle.net/znibble/7e06LmLe/ – cube

0

당신이 일의 배열을 가지고 뭔가를 가지고 있는지 확인하려면, 내가 배열에 새로운 .includes() 속성을 사용합니다 : 대신 문자열에서 요일을 추출의, 또한

["Sun", "Mon", "Tue", "Wed", "Thu"].includes(today); 

을 출력은 Date.prototype.getDay()입니다.


당신이 polyfill을 포함하지 않는 경우, 당신은 내가 Codegolf.SE에서 배운이 트릭 사용할 수 있습니다

~["Sun", "Mon", "Tue", "Wed", "Thu"].indexOf(today); 

~가의 비트를 변환하는 바이너리 NOT 연산자,이다 데이터 유형을 그 반대로 설정하십시오. 검색어의 인스턴스가 없을 때 .indexOf()에서 반환되는 -1의 이진수 NOT은 0입니다. JavaScript에는 강압이라고하는 개념이 있습니다. 즉 부울을 추가하는 등의 부조화가있는 경우를들 수 있습니다. 다른 유형으로 변환 할 하나의 유형의 값. 예를 들어, 0이 아닌 모든 숫자는 true으로 강제 변환되고 0false으로 생성됩니다. 위의 텍스트를 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 
} 

이 몇 가지 장점

  1. 궁극적 인 사용자 정의 기능

    있습니다. 정확히 일치시킬 요일을 지정할 수 있습니다.
  2. 문자열에 의존하지 않습니다. 문자열에서 추출하는 방법은 영어가 아닌 사용자 에이전트에서 작동하지 않을 것입니다. 왜냐하면 날짜 문자열이 달라지기 때문입니다.
+0

작동하지 않음 : https://jsfiddle.net/znibble/7e06LmLe/ – cube

+0

어떤 브라우저를 사용하십니까? Internet Explorer 또는 Edge를 지원하지 않는 주요 브라우저이기 때문에 Internet Explorer 또는 Edge를 추측하고 있습니다. [MDN 페이지에서] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill) 당신이 사용할 수있는 polyfill이 있습니다. .includes)'는 어디서나 작동합니다 – MayorMonty

+0

크롬을 사용하고 있습니다 – cube