자바스크립트로 range 함수 쓰기!~서열과 역순~
5943 단어 JavaScriptPython
입문
저번에 썼어요이런 보도..
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
을 계산한다.
그런데 어려운 건 다른 곳에서.
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])
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 == start + 1
때false
에만 돌아오는 오류도 그곳에 편입되었다.전체적으로 기교를 넣지 않고 길고 솔직한 묘사가 된 것은 개선해야 한다.그러나 이번 취지는range 함수의 복잡한 처리를 실현하는 것이기 때문에 단축하는 데는 지난번처럼 그렇게 신경을 쓰지 않았다.
만약 단축된 생각, 다른 실시, 오류 등이 생각난다면 반드시 저에게 알려주세요.
여기서 마치겠습니다.
Reference
이 문제에 관하여(자바스크립트로 range 함수 쓰기!~서열과 역순~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yukikaze/items/99368dbc9462720894dd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)