Показать сообщение отдельно
  #26 (permalink)  
Старый 02.05.2018, 20:17
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Можно было бы ограничиться рекурсивной переделкой варианта j0hnik:
function generate(arr, i, value, result){
  if(!result){
    return generate(arr, i, '', []);
  }

  if(!i--) {	
    return result.push(value);
  };

  for(var k = 0; k < arr.length; k++){
    generate(arr, i, value + arr[k], result);
  }

  return result
}

console.log(generate(['A','B','C','D','E'], 4))

Но на самом деле тут просто нужно добавить капельку математики:
function generate(arr, n){
  var length = arr.length,
      result = new Array(Math.pow(length, n));

  for(var i = result.length, temp = new Array(n), j; i--;){
    j = n;

    while(j--){
      temp[j] = arr[i / Math.pow(length, j) % length | 0];
    }

    result[i] = temp.join('');
  }
  
  return result
}
console.log(generate(['A','B','C','D','E'], 4));
__________________
29375, 35

Последний раз редактировалось Aetae, 02.05.2018 в 23:41.
Ответить с цитированием