shuffle
11994 ワード
次のコードは行ごとに説明します.
slice()メソッドは、ある配列の開始から終了まで(endは含まない).であるかのように
関連する配列を浅いコピーして、新しい配列オブジェクトを返します.
元の配列は変更されません.
次のコードは自分で考えたほうがいいです.
Math.floor()関数は、与えられた数値と等しいまたは小さい整数の中で最大の数を返します. Math.random()関数は、0未満または1以上の範囲で均一な浮動小数点数の個数を近似的に返す. という値は、所望の範囲に変形することができる. Mathの場合.random()*整数を使用して範囲を指定すると、指定した整数内で範囲の整数に戻ります.
_.shuffle = function (arr) { //1. shuffle 함수의 매개변수, 파라미터로 arr 배열이 하나 들어온다.
//2. 들어온 배열을 함수 안에서 새로운 변수를 선언해서 arr.slice()를 한다.
let arrCloned = arr.slice(); //()안에 시작 기준 인덱스를 주지 않으면 들어온 배열의 0번째부터 끝까지 arr.length만큼 slice()한다.
//3. 0부터 arr의 크기만큼 반복문을 반복한다.
for (let fromIdx = 0; fromIdx < arr.length; fromIdx++) {
/*3-1. 위의 매개변수로 들어온 배열의 크기만큼 난수의 범위를 정해주고,
소숫점 처리는 Math.floor() 메서드를 사용해서 가장 큰 정수를 반환한다.*/
const toIdx = Math.floor(Math.random() * arr.length);
//3-2. arr 배열의 전체를 얕은복사 해 놓은 arrCloned[0]번째 인덱스의 element, 요소를 temp에 할당한다.
let temp = arrCloned[fromIdx];
//3-3. arrCloned[0]번째에 난수를 발생시켜 랜덤으로 나온 정수값을 할당준다.
arrCloned[fromIdx] = arrCloned[toIdx];
//3-4. 난수로 발생되는 정수에 해당하는 인덱스에 temp에 저장된 값을 넣어준다.
arrCloned[toIdx] = temp;
}
//4. 난수가 발생하고, 바뀐 값을 담은 arrCloned 배열을 리턴한다.
return arrCloned;
};
//temp에 0부터 1씩 증가하는 인덱스의 자리에 해당하는 요소를 할당하고,
//랜덤으로 발생하는 난수의 값에 해당하는 요소를 arrCloned[fromIdx]에 할당한다.
//그리고, 난수에 해당하는 요소에는 temp에 할당된 값을 다시 넣어주기 때문에 인덱스가 1씩 증가하며 반복문이 실행될 때 마다
//랜덤으로 섞인 배열을 리턴받을 수 있다.
上のコードで使う方法をよく学びました.slice()
slice()メソッドは、ある配列の開始から終了まで(endは含まない).であるかのように
関連する配列を浅いコピーして、新しい配列オブジェクトを返します.
元の配列は変更されません.
次のコードは自分で考えたほうがいいです.
const month = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
let month1 = month.slice(4, 7);
let month2 = month.slice(8);
let month3 = month.slice(-2);
let month4 = month.slice();
console.log(month1); //["May", "June", "July"]
console.log(month2); //["September", "October", "November", "December"];
console.log(month3); //["November", "December"]
console.log(month4); //["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
Math.floor()
console.log(Math.floor(7.98)); //7
console.log(Math.floor(5.0007)); //5
console.log(Math.floor(3)); //3
console.log(Math.floor(-100.34)); //-101
Math.random()
for(let i=0; i<numArr.length; i++) {
console.log(Math.random() * numArr.length);
}
//실행할 때 마다 계속해서 결과가 바뀔 것이다.
8.585251480389724
0.2590061665144394
1.8470620463205512
4.285130819090998
0.5233112704874943
1.0815506959379584
9.364118545440402
8.57370279475215
9.820973648139697
4.220319148671294
上のコードを分かりやすい変数名に変えて、小文字の配列でテストします.Reference
この問題について(shuffle), 我々は、より多くの情報をここで見つけました https://velog.io/@jy777hi/shuffleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol