jsで配列を分解した全パターンを取得する
5757 ワード
やりたいこと
わかりやすく言葉で説明できないので、完成イメージをかきます!
console.log(allSubArray([1,2,3]);
/*
[
[[1], [2], [3]],
[[1, 2], [3]],
[[1], [2, 3]],
[[1, 2, 3]]
]
(順番の入れ替え([[1, 3], [2]]など)は考慮しません)
*/
何に使うの?とか言わないでください :)
考え方
再帰使えるかな・・・
const allSubArray(array) => {
// 再帰終了条件
if(array.length === 0) return [[]];
cosnt result = [];
// array = [1,2,3,4]とする
/* 最初は0番目の要素[1]とそれ以外[2,3,4]に分割して考える */
const subArrays = allSubArray([2,3,4]);
// subArrays = [[[2], [3], [4]], [[2,3],[4]], [[2],[3,4]], [[2,3,4]] ] が期待される
// [1]とsbuArraysの各要素をくっつけたものをresultにpush
/* 期待されるresultは
[
[[1], [2], [3], [4]],
[[1], [2,3], [4]],
[[1], [2], [3,4]],
[[1], [2,3,4]]
]
*/
/* 次に、1番目までのの要素[1, 2]とそれ以外[3,4]に分割して考える*/
/* 今感じで行けるか・・・? */
}
やってみよう
const allSubArray = (array) => {
// 再帰終了条件
if(array.length === 0) return [[]];
const result = [];
// array = [1,2,3,4]とする
/* 最初は0番目の要素[1]とそれ以外[2,3,4]に分割して考える */
for(let i = 1; i <= array.length; i++) {
const fixedArray = array.slice(0, i); //i=1の時:fixedArray = [1], i=2の時:fixedArray =[1,2]
const otherArray = array.slice(i); //i=1の時:otherArray = [2,3,4]
// i=1の時:subArrays = [[[2], [3], [4]], [[2,3],[4]], [[2],[3,4]], [[2,3,4]] ] が期待される
const subArrays = allSubArray(otherArray);
for(const subArray of subArrays) {
result.push([fixedArray].concat(subArray));
}
}
return result;
}
実行結果
const allSubArray(array) => {
// 再帰終了条件
if(array.length === 0) return [[]];
cosnt result = [];
// array = [1,2,3,4]とする
/* 最初は0番目の要素[1]とそれ以外[2,3,4]に分割して考える */
const subArrays = allSubArray([2,3,4]);
// subArrays = [[[2], [3], [4]], [[2,3],[4]], [[2],[3,4]], [[2,3,4]] ] が期待される
// [1]とsbuArraysの各要素をくっつけたものをresultにpush
/* 期待されるresultは
[
[[1], [2], [3], [4]],
[[1], [2,3], [4]],
[[1], [2], [3,4]],
[[1], [2,3,4]]
]
*/
/* 次に、1番目までのの要素[1, 2]とそれ以外[3,4]に分割して考える*/
/* 今感じで行けるか・・・? */
}
const allSubArray = (array) => {
// 再帰終了条件
if(array.length === 0) return [[]];
const result = [];
// array = [1,2,3,4]とする
/* 最初は0番目の要素[1]とそれ以外[2,3,4]に分割して考える */
for(let i = 1; i <= array.length; i++) {
const fixedArray = array.slice(0, i); //i=1の時:fixedArray = [1], i=2の時:fixedArray =[1,2]
const otherArray = array.slice(i); //i=1の時:otherArray = [2,3,4]
// i=1の時:subArrays = [[[2], [3], [4]], [[2,3],[4]], [[2],[3,4]], [[2,3,4]] ] が期待される
const subArrays = allSubArray(otherArray);
for(const subArray of subArrays) {
result.push([fixedArray].concat(subArray));
}
}
return result;
}
実行結果
できてる!!(何に使うんだろう)
Author And Source
この問題について(jsで配列を分解した全パターンを取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/rr1029/items/15024ba889f82e1a88b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .