アナグラム全パターンと言ってもいい。
渡された要素リストの各要素を最初の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" ]