最初に長いタイトルで申し訳ありません。
アンダースコアの _.shuffle を解決している最中に、スプライスの使用に遭遇しました。これが私の元のコードです:
shuffle = function(array) {
var shuffledArray = [];
var total = array.length;
var copiedArray = array.slice();
while (total){
var randomNum = Math.floor(Math.random() * total);
shuffledArray.push(copiedArray.splice(randomNum,1));
total--;
}
return shuffledArray;
};
var originArray = [1, 2, 3, 4];
console.log(shuffle(originArray));
ただし、テストした後、値だけではなく、[]内の各値が返されることに気付きました。
すなわち
[ [ 4 ], [ 3 ], [ 1 ], [ 2 ] ]
//instead of [ 4, 3, 1, 2]
この行を変更したとき (splice の deleteCount の後に '[0]' を追加)
shuffledArray.push(copiedArray.splice(randomNum,1));
これに
//edited
shuffledArray.push(copiedArray.splice(randomNum,1)[0]);
私が取得した戻り配列は、私が望んでいたものです。
[ 3, 1, 2, 4 ] //values are not in [ ]
splice() の後に [0] を追加すると [ ] に値が返されない方法、または [0] がない理由を誰かが説明できますか?