我很难在代码中获得以下概念:
假设我们得到以下数组:
[
'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;
}
这也无法按预期工作。
我感到有点尴尬,我无法完成我原先认为的这么简单的任务。但我真的希望从中吸取教训。
非常感谢您的建议和提示。
答案 0 :(得分:1)
你的想法是正确的。递归肯定是要走的路。我在下面实现了一个建议的解决方案,它可以为您提供所需的输出。
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);