アナグラム全パターンと言ってもいい。
渡された要素リストの各要素を最初の1つにして、残りの要素を再帰関数に渡すことで全パターンを取得するというロジックになっている。
"remainList"でググったらほぼ同じものがヒットして、そりゃ車輪の再発明だよなあと思った。
function getPatternList(itemList) { if (itemList.length == 1) { return [itemList[0]]; } var resultList = []; for (var idx=0; idx<itemList.length; idx++) { var remainList = itemList.filter((e,i) => i != idx); var patternList = getPatternList(remainList); for (var pattern of patternList) { resultList.push( [itemList[idx]].concat( pattern ) ); } } return resultList; } getPatternList(["a", "b", "c"]); // 結果 // [ "a", "b", "c" ] // [ "a", "c", "b" ] // [ "b", "a", "c" ] // [ "b", "c", "a" ] // [ "c", "a", "b" ] // [ "c", "b", "a" ]