ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で配列のすべての順列を生成するにはどうすればよいですか?
順列とは、配列から可能なすべてのシーケンスを生成することを指します。 JavaScript では、いくつかの異なるアプローチを使用して整数の配列を並べ替えることができます。
1 つのアプローチには、再帰とメモ化を使用して、以前に計算された並べ替えを追跡することが含まれます。実装例は次のとおりです。
let permArr = []; let usedChars = []; function permute(input) { const chars = input.sort(); // Prevent duplicate permutations with identical values for (let i = 0; i < chars.length; i++) { const ch = chars.splice(i, 1); usedChars.push(ch); if (chars.length === 0) { permArr[permArr.length] = usedChars.join(""); } permute(chars.join("")); chars.splice(i, 0, ch); usedChars.pop(); } return permArr; }
別のアプローチでは、非変異スライス手法を使用して、元の配列の変更を回避します。
function permutator(inputArr) { let result = []; function permute(arr, memo = []) { if (arr.length === 0) { result.push(memo); } else { for (let i = 0; i < arr.length; i++) { permute(arr.slice(0, i).concat(arr.slice(i + 1)), memo.concat(arr[i])); } } } permute(inputArr); return result; }
非変異の ES6 実装アプローチ:
const permutator = (inputArr) => { let result = []; const permute = (arr, m = []) => { if (arr.length === 0) { result.push(m); } else { for (let i = 0; i < arr.length; i++) { let curr = arr.slice(); let next = curr.splice(i, 1); permute(curr.slice(), m.concat(next)); } } }; permute(inputArr); return result; };
たとえば、次の入力配列の場合:
[1, 2, 3]
置換関数は次の出力を行います:
[ [ 1, 2, 3 ], [ 1, 3, 2 ], [ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ] ]
これらの順列は、入力配列要素の考えられるすべての組み合わせを調査することによって生成され、各要素が 1 回で 1 回だけ使用されるようになります。それぞれの順列
以上がJavaScript で配列のすべての順列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。