#javascript #function
Вопрос:
function shuffle(o) {
for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] =
o[j], o[j] = x);
return o;
};
Не совсем уверен, что делает последняя часть
Комментарии:
1. Последняя часть возвращает массив (поскольку функция переупорядочивает свои элементы на месте).
2. Похоже на какой-то уменьшенный код или кого-то «умного». Лучше получить исходный код или спросить автора. Кстати, «последняя часть» расплывчата. Я имею в виду, что точка с запятой (последний символ кода) на самом деле не нужна, но сообщает компилятору, что предшествующее ей утверждение завершено. Что касается
for
выражения, у MDN есть хорошая документация на этот счет.
Ответ №1:
Это похоже на то, что кто — то принимает вызов «Я могу сделать это в одной строке», что является очень аккуратным и забавным вызовом, но ему нет места в реальном мире кода- ваши коллеги возненавидят вас. Так что давайте расширим его до чего-нибудь читабельного:
function shuffle(o) {
// iterate over the entire input array "o"
for(var i = o.length - 1; i; i--) {
// get the "current" item and save it in variable "x"
var x = o[i];
// generate a random number within the bounds of the array
var j = parseInt(Math.random() * (i 1));
// The next two lines essentially swap item[i] and item[j]
// set the "current" item to a randomly picked item
o[i] = o[j];
// put the "current" item in the random position
o[j] = x;
}
return o;
};
Ответ №2:
function shuffle(inputArray) {
let i = inputArray.length;
while (i) {
const j = parseInt(Math.random() * i); // generate random integer smaller than i (Math.random() generates random number between 0 and 1)
i = i-1;
// swap elements on position i and j
const element = inputArray[i];
inputArray[i] = inputArray[j]
inputArray[j] = x;
}
return inputArray;
};
Комментарии:
1. для нового программиста это преобразование из a
for
в awhile
немного помогает — попробуйте сделать это с исходным циклом 🙂