나는 내가 지정한 숫자 또는 문자열에 따라 정렬되고 싶은 자바 스크립트 배열을 가지고 있습니다. 나는 배열을 무작위로 정렬하는 것처럼 보이길 원하지만 배열이 항상 "6543"인 경우 정렬됩니다 (예 :).Javascript : 입력 번호에 따라 배열을 정렬합니다. 무작위로 정렬해야 나타납니다
3
A
답변
2
a shuffle function을 사용하고 Math.random()
을 a random number generator where you can set your own seed으로 대체하십시오. 그런 다음 시드를 입력 번호로 설정하십시오.
0
작은 씨앗과 배열이 작동하려면 내 예를 들어 창의력을 발휘해야합니다.
Alex가 제안했듯이, 그가 제공 한 사이트에는 좋은 셔플 기능이 있습니다. 나는 다른 함수와 조합하여 시드의 ascii 값을 얻는다.
예제를 변경하여 입력을 해시하는 것이 좋습니다. 그렇지 않으면 많은 충돌이있을 것입니다.
<script>
// http://sharkysoft.com/tutorials/jsa/content/018.html
function ascii_value (c)
{
// restrict input to a single character
c = c . charAt (0);
// loop through all possible ASCII values
var i;
for (i = 0; i < 256; ++ i)
{
// convert i into a 2-digit hex string
var h = i . toString (16);
if (h . length == 1)
h = "0" + h;
// insert a % character into the string
h = "%" + h;
// determine the character represented by the escape code
h = unescape (h);
// if the characters match, we've found the ASCII value
if (h == c)
break;
}
return i;
}
// http://snippets.dzone.com/posts/show/849
shuffle = function(o,seed){ //v1.0
for(var j, x, i = o.length; i; j = parseInt(seed/(o.length * 255) * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
function seedSort (string){
var charList = string.split('');
var seedValue = 0;
for(var i in charList){
seedValue += ascii_value(charList[i]);
}
return seedValue;
}
document.write(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],seedSort("bob")));
document.write("<br>");
document.write(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],seedSort("steve")));
document.write("<br>");
document.write(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],seedSort("david's house")));
document.write("<br>");
document.write(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],seedSort("acorn22")));
</script>
이 임의의 "표시"하는 ...
8,2,3,4,5,6,7,0,9,1
4,9,3,0,5,6,7,8,1,2
8,0,6,1,5,2,7,3,9,4
4,8,3,0,5,6,7,1,9,2
생성합니다 : 여기
는 코드입니다. 나는 큰 씨를 제안 할 것이다.
3
자바 스크립트 자체는이 기능을 제공하지 않습니다. RNG는 시드 할 수 없습니다. 사람이 취할 수있는 다른 접근 방법이 여전히 있습니다. 여기에 하나 있습니다. 시드가보다 커야 (또는 동일한 배열이 반환 됨) 이어야합니다.이 충분한 "임의성"을 위해 배열 크기보다 커야합니다.
Array.prototype.deterministicShuffle=function(seed){
// A little error handling, whynot!
if(!seed)
throw new Error("deterministicShuffle: seed not given, or 0");
var temp,j;
for(var i=0; i<this.length; i++){
// Select a "random" position.
j = (seed % (i+1) + i) % this.length;
// Swap the current element with the "random" one.
temp=this[i];
this[i]=this[j];
this[j]=temp;
}
return this;
}
// Try it out, Aaron!
alert([0,1,2,3,4,5,6,7,8,9].deterministicShuffle(6543));
alert([0,1,2,3,4,5,6,7,8,9].deterministicShuffle(6544));
alert([0,1,2,3,4,5,6,7,8,9].deterministicShuffle(6545));
관련 문제
- 1. 배열을 무작위로 정렬
- 2. PHP는 진지하게 다차원 배열을 정렬합니다
- 3. 테이블 뷰의 객체 배열을 정렬합니다.
- 4. 무작위로 배열을 제거
- 5. 텍스트 입력 배열을 동적으로 늘리기 (HTML/JavaScript)
- 6. 스프링 JDBC가 무작위로 트랜잭션을 롤백하는 것으로 나타납니다.
- 7. C++에서 부동 소수점 배열을 정렬합니다.
- 8. 배열, 키를 통해 정렬해야 함
- 9. 패널이 나타납니다 onClick PHP JAVASCRIPT
- 10. 배열을 두 개의 배열로 무작위로 배열하기
- 11. C++ : 배열을 무작위로 2D 배열에 배치
- 12. Javascript 기능 질문 - 양식 항목에 나타납니다
- 13. 슬라이더 막대가 오른쪽으로 이동함에 따라 나타납니다.
- 14. JSON에 배열을 serialize하는 JavaScript
- 15. Magento - 페이지 번호에 따라 다른 수의 요소가 표시되는 페이지 매기기
- 16. Checked Listbox 선택 번호에 따라 텍스트 파일에서 특정 줄을 읽습니다.
- 17. JavaScript 예측 입력/드롭
- 18. PowerShell JavaScript Button 클릭하면 Force Command가 나타납니다.
- 19. 무작위로
- 20. 선택한 옵션에 따라 입력 필드의 값을 설정하십시오.
- 21. MVC 강력 배열을 ViewData를 입력
- 22. aspx.cs에서 입력 컨트롤 배열을 정의하십시오.
- 23. 전화 번호에 "-"를 더하기
- 24. 함수 포인터의 JavaScript 배열을 호출하지 않고 호출합니다.
- 25. JavaScript 배열을 코드 숨김으로 전달합니까?
- 26. JavaScript : 팝업 대신 배열을 순회합니까?
- 27. Javascript - 접두어 배열을 제거하는 Regex
- 28. 표 배열을 무작위로 테이블에 채우는 방법을 알고 있습니까?
- 29. drupal_get_form이 노드 배열을 따라 전달하지 않습니다.
- 30. 상위 키에 따라 PHP 배열을 선택적으로 병합
일종의 해시 메커니즘을 사용 해본 적이 있습니까? –