2013-08-28 2 views
22

편집 : 닫을 투표가 잘못되었습니다. Repeat Character N Times에 허용되는 답변은 일반적으로 적용되지 않습니다. 예컨대 :"반복 n 번"에 대한 관용구?

>>> Array(3).map(Math.random) 
[undefined, undefined, undefined] 

다른 두 답변을 수정 제안 내장 클래스, 내가 완전히 받아 들일 수없는 고려 연습.

>>> [1, 1, 1].map(Math.random) 
[0.6324464592887568, 0.5969209806782131, 0.7362755801487572] 

더미 어레이의 사용 (예 [1, 1, 1])를 하나에 map를 호출 막도록 :


여기 JS 3 개 난수들의 배열을 생성하기 위해 하나 다소 낭비적이고 비실용적 방법 충분히 크다. n (메모리 부족)과 비실용적이다.

>>> repeat(3, Math.random) 
[0.21425955396598173, 0.00226050232425945, 0.45261888146445495] 

가장 가까운 사람이 "순수 JS"이 무엇을 올 수 있어요 하나는 가상의 같은 것하고 싶은 무엇

?

(내가 밑줄 알고 있어요,하지만 같은 map의 해석으로, 나에게 아무 의미의 API에 물건이있다, 그래서 그것을 방지하기 위해 노력하고있어.)

+1

가능한 중복 f [문자 N 번 반복] (http://stackoverflow.com/questions/1877475/repeat-character-n-times). 그 질문은 당신보다 조금 더 묻고 있지만 개념 (n 요소의 배열 만들기)은 동일합니다. 궁극적으로'Array (n + 1)'을 사용하십시오 –

+0

정수를 원합니까? 무엇과 무엇 사이의 난수인가? – PHPglue

+1

@SimpleCoder : 제 질문 문에서 '[1,1,1] .map (Math.random)'을 낭비한 것으로 명시 적으로 거부했습니다. 'Array (3) .map (Math.random)'은 어떻게 다른가요? 물론, * n * = 3의 경우 폐기물은 무시할 만하지만 더 큰 * n *은 무시할 수 있음을 알고 있습니다. – kjo

답변

31

Underscore.js가있다

: 당신은 밑줄을 사용하지 않으려면

_.times(3, Math.random) 

, 당신은 당신의 자신의 times 기능 (복사 약간 밑줄 소스에서 간체) 쓸 수 있습니다 : 당신이 원하는 것을 정확히 수행 times 기능

+0

downvote 더 적은 투표로 더 많은 현재와 더 나은 답변이 있기 때문입니다. – quinn

7

shortmost 우아한 ES6 :

let times=(n,f)=>{while(n-->0)f();} 

아, 배열을 만들기위한 아니지만, 여전히 깔끔한입니다!

times(3,()=>print('wow')) 

또는 루비 스타일 :

Object.assign(Number.prototype,{times(f){x=this;while(x-->0)f();}}) 
3..times(()=>print('wow')) 
+5

'n -> 0 '은 어떤 종류의 화살표 연산자가 아니라는 것을 지적하고 싶습니다.'n--> 0'입니다. 그래도 멋지다. – Noumenon

+4

의미 상 정확하지는 않지만 "n이 0에 가까우면서"(while은 (n -> 0)을 읽을 수 있습니다.) – Anona112

+1

'n'이 정수라고 가정 할 수 있다면' > 0 체크. 왜냐하면'n'이 0이 될 때 그것은 false와 같을 것이기 때문이다. 정수가 아닌'n'은 무한 루프가됩니다. –

7

아마 Array.from 콜백 사용 될 수 있습니다

var result = Array.from(Array(3), Math.random); 
 

 
console.log(result);

+0

그래, 최종 배열에서'.map'처럼 작동합니다. 약간의 개발자들이 이것을 사용하고 한눈에 그것을 이해합니다. 하지만 그것의 깨끗한, 미숙 한 devs에 대한 가독성 무시 – wopolow

15

그것은 을 사용하여 수행 할 수 있습니다이지만 배열을 비워 둘 수 없습니다.

console.log(
 
    Array(3).fill().map(Math.random) 
 
);

또는 수도 spread 하늘의 배열이 여전히 반복 가능한대로 매핑 전에 undefined의 값으로 빈 array : 먼저 채우기

console.log(
 
    [...Array(3)].map(Math.random) 
 
);