#javascript #reactjs
Вопрос:
Я получил приведенный ниже код из StackOverflow для перетасовки массива, и он отлично работает.Можете ли вы помочь мне преобразовать это в асинхронную функцию?
const src = [...'abcdefg'];
const shuffle = arr =>
[...arr].reduceRight((res,_,__,s) =>
(res.push(s.splice(0|Math.random()*s.length,1)[0]), res),[]);
console.log(shuffle(src));
Комментарии:
1. Не могли бы вы объяснить, почему вы хотите, чтобы он был асинхронным? Там нет ничего, что можно было бы сделать асинхронно
2. Что вы подразумеваете под преобразованием в асинхронное?! добавление
async
ключевого слова перед этим делает его асинхронным (оно возвращает обещание)! но в этом нет никакой пользы. зачем тебе это нужно?3. Что вы уже пробовали самостоятельно? ТАК что это не служба написания кода. Есть ли какая-то проблема, которую, по вашему мнению, поможет решить асинхронность этой функции? Возможная проблема XY ?
Ответ №1:
const shuffle = async (arr) =>
[...arr].reduceRight((res, _, __, s) =>
(res.push(s.splice(0 | Math.random() * s.length, 1)[0]), res), []);
async function shuffle (arr) {
return [...arr].reduceRight((res, _, __, s) =>
(res.push(s.splice(0 | Math.random() * s.length, 1)[0]), res), []);
}
Комментарии:
1. Ваша первая функция ничего не возвращает, потому что вы заключили функцию со стрелкой в фигурные скобки, что отменяет неявное возвращение. Вы можете заключить его в обычные круглые скобки, если хотите, или добавить
return
ключевое слово