javascriptで並び順の全パターンを取得する関数

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