2014-01-27 6 views
0

자바 스크립트가 새로워서 내가 볼 영화를 결정할 수있는 작은 것을 만들려고합니다. 나는 몇몇 영화의 시험 목록을 만들었다. 그런 다음 목록에서 한 번에 두 편의 영화를 볼 수 있으며 영화 한 번을 거부해야 할 때마다 영화가 하나 밖에 없을 때까지이 작업을 계속해야합니다. 그러면 팝업을 통해 어떤 영화를 볼 것인지 알려줍니다.스플 라이스를 사용할 때 어레이에서 올바르게 삭제되지 않는 항목

문제는 올바르게 작동하지 않는다는 것입니다. 내가하는 일에 상관없이 목록의 마지막 항목을 삭제하지 않는 것, 때로는 영화가 전혀 삭제되지 않는 경우가 있습니다. 여기에 제가 사용하고있는 코드가 있습니다. 누군가가 올바른 방향으로 나를 도와 줄 수 있습니까?

var options = [ 
"ET", 
"Schindler’s List", 
"Up", 
"What’s Eating Gilbert Grape", 
]; 

var process = function() { 
    while (options.length > 1) { 
    for (i = options.length-1; i >= 1; i--) { 
     var select = prompt("VETO one of the following: 1. " + options[i] + " 2. " + options[i-1]); 
     if (select === 1) { 
      options.splice(i, 1); 
     } 
     else { 
      options.splice(i-1, 1); 
     } 
    } 
} 
}; 
process(); 
alert(options); 
+1

보통 배열을 반복하면서 배열을 수정하는 것은 나쁜 생각입니다. 다른 영화를 어떻게 선택 하시겠습니까? 왜 무작위를 사용하지 않습니까? –

+0

그래서 ncabral의 대답이 내 질문을 해결했지만 더 나은 방법이 있다면 나는 모든 귀입니다. 나는 아직도 초심자 다. 기본적으로 내 목록에있는 모든 영화를 한 번에 2 개씩 사용자에게 제공하고 싶습니다. 사용자는 두 영화 중 하나에 대해 거부권을 행사하고 영화가 하나만 남을 때까지 두 편의 영화 등을 선물로 받게됩니다. 이것은 기본적으로 나 자신과 우리가 어떤 영화를 볼 것인지를 선택하는 것입니다. 그래서 나는 그것을 약간 자동화하고 싶었습니다. 이상적인 세상에서는 무작위로 영화를 비교할 수 있지만 배열을 수행하는 방법을 알지 못했습니다. –

+0

문제 없습니다. 당신의 여자 친구를 기쁘게 자바 스크립트의 멋진 사용 : –

답변

2

select 변수는 문자열로 반환됩니다. 따라서,

select === 1 // always false 
select === '1' // works as expected 

수정 출처 :

var options = [ 
"ET", 
"Schindler’s List", 
"Up", 
"What’s Eating Gilbert Grape", 
]; 

var process = function() { 
    while (options.length > 1) { 
     for (var i = options.length-1; i >= 1; i--) { 
      var select = prompt("VETO one of the following: 1. " + options[i] + " 2. " + options[i-1]); 
      if (select === '1') { // changed 
       options.splice(i, 1); 
      } 
      else { 
       options.splice(i-1, 1); 
      } 
     } 
    } 
}; 
process(); 
alert(options); 

는 또한, 변수를 선언 var를 사용 - 항상.

+0

정말 고마워요! 내가 어리석은 실수를 저질렀다는 것을 믿을 수 없다. 또한 팁 re : var 감사드립니다. –

+0

당신을 진심으로 환영합니다. js 파일에서 JSHint와 같은 것을 사용하면 잠재적 인 문제를 피할 수 있습니다. – ncabral

0

(=== 하나를 선택) 항상 문자열로 반환합니다 선택 때문에 거짓 .... 대신 선택 === 1 사용을 선택하면 === "1"또는 선택 == 1