배열 수가 적습니다. 어떤 배열인지는 모르지만 그 중 몇 개가 될지는 모릅니다. 그러나 주로 1에서 15까지의 범위에 있으며 더 많아야합니다.배열에 새 고유 번호 추가
이 범위에 가능한 한 근접해야하고 고유 할 새로운 난수를 추가하는 방법 (기존 수와 같을 수 없음)?
var myarray = [4,5,1,9,6];
배열 수가 적습니다. 어떤 배열인지는 모르지만 그 중 몇 개가 될지는 모릅니다. 그러나 주로 1에서 15까지의 범위에 있으며 더 많아야합니다.배열에 새 고유 번호 추가
이 범위에 가능한 한 근접해야하고 고유 할 새로운 난수를 추가하는 방법 (기존 수와 같을 수 없음)?
var myarray = [4,5,1,9,6];
이 같은 기능이 작동한다 :
그것은 예를 들어, 배열, 자바 스크립트의
는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]
[...]
테스트하고 대단히 감사합니다, 대단히 :) – Zack
코드를 지금까지 보여줄 수 있습니까? 문제가 해결되지 않았습니까? 어떻게 문제를 해결하려고 했습니까? – elclanrs
"최대한 가깝게"정의해야합니다. 항목이 배열에 있는지 확인하려면'if (myarray.indexOf (someNum)! == -1) {// do something}' – user1091949
@elclanrs 내가 2 루프에 갇혀있다. 더 나은 해결책 – Zack