Прежде всего, извините за длинный титул, я действительно не знал, как это лучше сказать.Почему добавление [0] после подсчета удаления в splice() возвращает только число?
В середине решения _.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]
Когда я изменил эту линию (добавлен '[0]' после того, как deleteCount в сращивания)
shuffledArray.push(copiedArray.splice(randomNum,1));
в этот
//edited
shuffledArray.push(copiedArray.splice(randomNum,1)[0]);
возвращение массива, Я получаю то, что я хотел, то есть
[ 3, 1, 2, 4 ] //values are not in [ ]
Может кто-нибудь объяснить, как добавление [0] после того, как splice() заставляет значение не возвращаться в [] или почему не имеет [0]?
'1 [0]' return _undefined_, поэтому вы вызываете то же, что и 'copiedArray.splice (randomNum)' – Grundy
. Я не совсем понимаю, что вы пытаетесь сделать? – Grundy
@Grundy: '1 [0]' действительно 'undefined', но' copiedArray.splice (randomNum) 'и' copiedArray.splice (randomNum, undefined) '** не ** то же самое. –