자바스크립트로 range 함수 쓰기!~서열과 역순~

5943 단어 JavaScriptPython

입문


저번에 썼어요이런 보도..
  • 최단 코드로range(start,stop,step)를 설치합니다.
  • 출력이 목록 애플릿에 의해 제한되지 않음
  • 마이너스 값을 고려하지 않음(start,stop,step, 출력의 번호가 0보다 크다고 가정함)
  • 실시 과정에서 많은 아이디어를 냈지만 파이썬의 마이너스 절차를 이루지 못했다.
    Python의range 함수는 상당히 편리하다. 특히 step에 -1을 넣으면 번호 목록을 거꾸로 되돌리는 기능이 있다(정확히 말하면 목록이 아니다).
    지난번 보도에서도 이 점이 실현될 수 없다는 지적을 받아 나도 아프다.그 이후로 나는 자바스크립트에서 Python range 함수를 실현하는 것을 고려하기 시작했다.그런데 이번에는 드디어?레나에 있는 그런 설치가 생각나서 적어 놨어요.

    본론


    일단 코드부터.
    
    var f=(a,b,c)=>(b-=a+1)&&(([d,e])=>[...Array((b-b%c)/e+1)].map((_,i)=>d+i*c))(c>0?[a,c]:[b+a-b%c,-c])
    
    의식적으로 패드를 쓰고 싶었지만 상당히 길어졌어요.101문자는 뺄셈 대입을 사용하기 때문에 함수 형식으로만 사용할 수 있다.지난번에 가장 짧았던 것을 감안하면 발전기 기법은 45자였는데, 정말 너무 길었다.
    읽기 편리하도록 논리를 써 보세요.
    function range(start, stop, step) {
      stop -= start + 1;
    
      const inner = ([startValue, positiveStep]) => {
        const length = (stop - (stop % step)) / positiveStep + 1;
        return [...Array(length)].map((_, i) => startValue + i * step);
      };
    
      if (step > 0) {
        return inner([start, step]);
      } else {
        return inner([stop + start - (stop % step), -step]);
      }
    }
    

    결과



    열심히 테스트하진 않지만 움직이는 것 같아요.

    해설


    inner 함수는 기능의 중심이다.여기서 등차수열의 공식初項 + 公差 * index을 계산한다.
    그런데 어려운 건 다른 곳에서.
  • 마지막 항목이stop보다 앞의 마지막 값
  • step가 마이너스일 때의 배열 길이
  • step가 마이너스일 때의 초기 값
  • 같은 상황에서 분리와 여수 계산을 사용하여 처리한다.
    단수판이지만 뺄셈 대입이 어려워 문자를 많이 썼다.그리고 실제로 stop == start + 1false에만 돌아오는 오류도 그곳에 편입되었다.전체적으로 기교를 넣지 않고 길고 솔직한 묘사가 된 것은 개선해야 한다.
    그러나 이번 취지는range 함수의 복잡한 처리를 실현하는 것이기 때문에 단축하는 데는 지난번처럼 그렇게 신경을 쓰지 않았다.
    만약 단축된 생각, 다른 실시, 오류 등이 생각난다면 반드시 저에게 알려주세요.
    여기서 마치겠습니다.

    좋은 웹페이지 즐겨찾기