짝수 또는 홀수 찾기

Aug 21 2020

짝수 또는 홀수를 찾기위한 스크립트를 작성하는 데 접근 할 수있는 방법이나 더 잘할 수있는 방법을 알아보기 위해 비평을 찾고 있습니다. 저는 JavaScript로 프로그래밍하고 일반적으로 프로그래밍하는 것이 처음입니다. 이것은 짝수 또는 홀수를 찾기 위해 제가 쓴 첫 번째 과제 중 하나입니다.

    var numList = [];
    while(numList.length < 5){
    numList.push(window.prompt());
    }

    var evenNumbers = [];
    
    numList.forEach(function(element){
        if (element % 2 === 0){ 
            evenNumbers.push(element);
        }
    })
    document.write(evenNumbers);

답변

9 LucasWauke Aug 21 2020 at 07:55

Array.prototype.filter 를 사용할 수 있습니다 .

다음과 같이 읽을 수 있습니다. 반환 함수 표현식을 만족하는 요소 만있는 배열을 반환합니다.

이렇게하면 배열 인스턴스화를 피할 수 있으며이 반복 후에 만 push.

var numList = [];
while(numList.length < 5){
  numList.push(window.prompt());
}

var evenNumbers = numList.filter(function (element) {
  return element % 2 === 0
});
// that's the same that 
// var evenNumbers = numList.filter(element => element % 2 === 0);

document.write(evenNumbers);

그러나 더 깔끔한 구문을 가진 화살표 함수를 사용할 수 있습니다 .

6 SᴀᴍOnᴇᴌᴀ Aug 21 2020 at 12:55

짝수 또는 홀수를 찾는 다양한 방법.

모듈로 연산자는 숫자가 짝수인지 홀수인지 테스트하는 데 잘 작동하지만 더 빠른 기술 (초보자가 알 것으로 예상하지 않음)은 비트 AND-ie& 를 사용하는 것 입니다. 작동 방식에 대한 자세한 설명은이 문서를 참조하십시오 .

function isEven(number) {
     return !(number & 1);
}
for (let x = 0; x < 6; x++) {
    console.log(x, ' is even: ', isEven(x));
}

기타 검토 측면

어레이 필터링

이미 언급했듯이 Lucas Array.prototype.filter()는에 요소 추가를 단순화하는 데 사용할 수 있습니다 evenNumbers. Array.prototype.reduce()각 반복이 누적 배열을 반환해야하고 초기 값을 배열로 설정해야하는 것처럼 간결하지는 않지만 사용할 수 있습니다.

당신에 대해 구체적으로 물어 보지 않았지만 성능을 원하는 경우, 코드가 수백만 달러를 실행 (또는 그 이상) 번 짧은 시간에, 다음 반복자 방지됩니다 예를 들어, (가능한 한 효율적으로 할 수 - 예를 들어, 기능 기술을 함께 array.filter(), array.map(), 뿐만 아니라 for...of루프 - 루프를 사용하십시오 for.

변수 선언

constvar두 배열에 대한 우발적 인 재 할당을 방지 하는 대신 사용할 수 있으며 변수가 블록 내부에 있으면 범위가 블록으로 제한됩니다. 으로 선언 된 경우에도 "항목을 배열로 푸시 할 수 있습니다." 1에 유의하십시오 const.

입력을 위해 사용자 승격

window.prompt()"사용자에게 텍스트를 입력하도록 요청하는 선택적 메시지가있는 대화 상자를 표시합니다." 2 . 사용자에게 예상 입력에 대한 정보를 제공하는 첫 번째 인수로 친숙한 메시지를 전달할 수 있습니다.

window.prompt(“Please enter a number”);

추가적으로 :

결과는 문자열입니다. 즉, 때때로 사용자가 제공 한 값을 캐스팅해야합니다. 예를 들어 응답이 숫자 여야하는 경우 값을 숫자로 캐스팅해야합니다.

  const aNumber = Number(window.prompt("Type a number", ""));

따라서 Number생성자를 사용하여 배열에 숫자를 저장할 수 있습니다.

numList.push(Number(window.prompt("Please enter a number")));

출력 보내기 document.write()

참고 : 때문에 document.write()문서에 쓰기 스트림 호출, document.write()폐쇄 된 (로드) 문서에 자동으로 다음 Document.open ()를 호출, 문서를 취소 것이다 .

4

따라서 DOM 요소가 제거되지 않도록 페이지에 존재하는 DOM 요소가있는 웹 페이지에서 실행되는 스크립트에이 기능을 사용할 계획을 세우지 마십시오.

5 RenéSchaar Aug 21 2020 at 14:03

var 대신 let ES6 사용

var numList = [];
let numList = [];

기타

필터 방법 사용

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
}) 

Lucas Wauke가 제안한 대로

let evenNumbers = numList.filter(element => element % 2 === 0);

사용자에게 프롬프트에 입력 할 내용을 알립니다.

numList.push(window.prompt());
numList.push(window.prompt("Please enter a whole number"));

코드 스타일을 더 잘 읽을 수 있도록 확실히 작업해야합니다.

들여 쓰기 사용

while(numList.length < 5){
numList.push(window.prompt());
}
while(numList.length < 5){
    numList.push(window.prompt());
}

중괄호 앞에 공백을 둡니다.

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
 numList.forEach(function(element) {
     if (element % 2 === 0) { 
         evenNumbers.push(element);
     }
 })

제 생각에는 괄호 안에 공백을두면 더 읽기 쉽습니다.

나는 개인적으로 많은 사람들이 이것을하는 것을 알지 못하지만 그것을 시도해보십시오.

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
 numList.forEach( function( element ) {
     if ( element % 2 === 0 ) { 
         evenNumbers.push( element );
     }
 } )

이것은 많은 괄호 (의사 코드)로 작업 할 때 특히 유용합니다 .

method(function(method(getter())).setSomething(getSomethingFromSomewhere(somewhere)))
method( function( method( getter() ) ).setSomething( getSomethingFromSomewhere( somewhere ) ) )

보시다시피 어떤 괄호가 함께 속하는지 쉽게 알 수 있습니다.

결론

전에

var numList = [];
while(numList.length < 5){
numList.push(window.prompt());
}

var evenNumbers = [];

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
document.write(evenNumbers); 

let numList = [];

while ( numList.length < 5 ) {
    numList.push( window.prompt() );
}

let evenNumbers = numList.filter(element => element % 2 === 0);

document.write( evenNumbers );