次の概念をコードに組み込むのに問題があります。
次の配列が与えられたとしましょう:
[
'h1,h2',
'span,style'
]
これから、次の出力を取得したいと思います。
[
'h1 span',
'h1 style',
'h2 span',
'h2 style
]
そのため、元の配列のすべての組み合わせを含む文字列の配列があり、順序も尊重されます(したがってspan h1
、style h2
無効です)。
詳細を説明するには:事実上コンマ区切りの値である文字列の単一レベルの配列があります。この配列を繰り返し処理し、これらの文字列をコンマで新しい配列に分割し、この新しい配列のインデックスごとに、元の配列の後続のインデックスからの他のすべての分割値を含む新しい文字列を作成します。
これをJavaScriptでプログラムしようとすると問題が発生します。再帰が必要になることは理解していますが、その方法について混乱しています。さまざまな異なる失敗した方法を試した後、私は現在これを持っています:
function mergeTagSegments(arr, i, s) {
i = i || 0;
s = s || '';
if(!arr[i]) { return s; }
var spl = arr[i].split(',');
for(var j in spl) {
s += spl[j] + mergeTagSegments(arr, i+1, s);
}
return s;
}
これも意図したとおりに機能しません。
もともとこんなに簡単な作業だと思っていたことができず、少し恥ずかしい思いをします。しかし、私は本当にこれから学ぶことを望んでいます。
アドバイスやヒントを事前に感謝します。
正しい方向に沿ったあなたの考え。再帰は間違いなく進むべき道です。以下に提案されたソリューションを実装しました。これにより、目的の出力が得られるはずです。
var values = ['h1,h2', 'span,style'];
function merge(input, index) {
var nextIndex = index + 1;
var outputArray = [];
var currentArray = [];
if(index < input.length) {
currentArray = input[index].split(',');
}
for(var i = 0, end = currentArray.length; i < end; i++) {
if(nextIndex < input.length) {
merge(input, nextIndex).forEach(function(item) {
outputArray.push(currentArray[i] + ' ' + item);
});
}
else {
outputArray.push(currentArray[i]);
}
}
return outputArray;
}
var output = merge(values, 0, '');
console.log(output);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加