Асинхронная функция для перетасовки массива

#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 ключевое слово