2014-04-16 3 views
-1

배열 수가 적습니다. 어떤 배열인지는 모르지만 그 중 몇 개가 될지는 모릅니다. 그러나 주로 1에서 15까지의 범위에 있으며 더 많아야합니다.배열에 새 고유 번호 추가

이 범위에 가능한 한 근접해야하고 고유 할 새로운 난수를 추가하는 방법 (기존 수와 같을 수 없음)?

var myarray = [4,5,1,9,6]; 
+0

코드를 지금까지 보여줄 수 있습니까? 문제가 해결되지 않았습니까? 어떻게 문제를 해결하려고 했습니까? – elclanrs

+1

"최대한 가깝게"정의해야합니다. 항목이 배열에 있는지 확인하려면'if (myarray.indexOf (someNum)! == -1) {// do something}' – user1091949

+0

@elclanrs 내가 2 루프에 갇혀있다. 더 나은 해결책 – Zack

답변

1

이 같은 기능이 작동한다 :

그것은 예를 들어, 배열, 자바 스크립트의

function addRandom(array, max) 
{ 
    if(array.length === max) { 
     return array; 
    } 

    var number = Math.round(Math.random() * (max - 1)) + 1; 
    if(array.indexOf(number) === -1) { 
     array.push(number); 
     return array; 
    } 

    return addRandom(array, max); 
} 

이것은 당신의 시작 배열 및 최대 임의의 정수를합니다. 배열의 길이가 이미 최대 정수와 같으면 배열이 꽉 차서 새로운 배열을 찾지 않습니다. 그렇지 않으면 1과 최대 사이의 새로운 난수를 만듭니다.

은 우리가 Math.round()과 결과의 둘레에, 한 적은 최대하여 곱하면, 당신은 다음이 우리의 최대 15이라고하면 1을 추가 (0-1로부터 float를 반환하는) Math.random()를 사용하여이 작업을 수행하려면 float 0에서 1까지 취하고 14로 곱해서 0에서 14가됩니다. 다음은 정수로 반올림되어 1에서 15 범위를 갖습니다.

마지막으로 Array.indexOf() IE 9 이상)을 사용하여 해당 번호가 이미 존재하는지 확인하십시오. 그렇지 않으면 Array.push()을 사용하여 숫자를 추가 한 다음 새 배열을 반환합니다. 그렇지 않으면 함수를 다시 실행하고 새 번호를 생성합니다.

이것을 테스트하려면 JSFiddle을 사용하십시오. 나는 길이가 5 인 배열로 시작하고 그것을 15 회 반복한다. 모든 번호가 생성 될 때까지 매번 난수가 추가된다는 것을 콘솔에 알 수 있습니다. 예를 들면 다음과 같습니다.

[4, 5, 1, 9, 6, 8] 
[4, 5, 1, 9, 6, 8, 15] 
[4, 5, 1, 9, 6, 8, 15, 2] 
[4, 5, 1, 9, 6, 8, 15, 2, 3] 
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12] 
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14] 
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7] 
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7, 11] 
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7, 11, 10] 
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7, 11, 10, 13] 
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7, 11, 10, 13] 
[...] 
+0

테스트하고 대단히 감사합니다, 대단히 :) – Zack