String permutations

by Alex Myronov

JavaScript

const perm = (arr) => {
  if (arr.length < 2) return arr

 	return arr.reduce((res, curr, index) => {
    const permutations = perm([
      ...arr.slice(0, index),
      ...arr.slice(index + 1)
    ])

		return [
    	...res,
      ...permutations.map(char => arr[index] + char)
    ]
  }, [])
}

const permutateCharArr = (prefix, arr, result) => {
	if (arr.length === 0) {
	  return result.push(prefix)
  }
 
	arr.forEach((char, index) => {
	  const prefixed = prefix + arr[index]
		permutateCharArr(
    	prefixed,
      [...arr.slice(0, index), ...arr.slice(index + 1)],
      result
    )
  })	
}

const result = []
const permutate = str => permutateCharArr('', str.split(""), result)

//permutate("abc")
//console.log(result)

console.log(perm("abc".split("")))