如果我有一系列信件:
a, b, d, e, f, g, h, i, l, u, ü
如何将它们分组并进行分组,以便someMagicFunction('a,b,d,e,f,g,h,i,l,u,ü')
返回类似这样的内容:
[
"a-b"
"d-g"
"h-i"
"l",
"u-ü"
]
这很容易吗?
注意:可能还有以下字符:ö,ä,ü,ß等。
答案 0 :(得分:0)
我可以建议一个基本的“神奇功能”解决方案。我希望你能更多地了解你所尝试的内容,或者至少有一些关于解决方案的思考方向。我也不清楚特殊字符应该如何工作,比如,它们应该被包含在正常字母表中吗?
无论如何,我的建议是按顺序创建一个包含所有字母表的数组,包括你需要/想要它们的特殊字母。然后,迭代你的“一系列字母”数组(称之为test
),并为其中的每个字符检查alphabet
数组中的索引是否正好在字符的索引之后在test
数组中出现在它之前。如果没有,您可以将它推入另一个数组的新空间(称之为grouped
)。
如果是(如果角色出现在alphabet
和test
中的同一个前一个元素之后),则进行另一次检查以查看之后的字符 > test
数组中的它也出现在alphabet
数组中。如果是,那意味着您可以继续test
循环的下一次迭代,否则,这意味着test
中的下一个字符将是一个不连续的字符,因此您可以更改最后一个字符串推入grouped
以包含"-"+test[i]
。
function someMagicFunction(test){
var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o", "ö","p","q","r","s","t","u","ü","v","w","x","y","z"];
var grouped = [];
for(var i=0; i<test.length; i++){
if (grouped.length && alphabet.indexOf(test[i]) - alphabet.indexOf(test[i-1])==1){
if(alphabet.indexOf(test[i+1])-alphabet.indexOf(test[i])==1)
continue;
else grouped[grouped.length-1] += "-"+test[i];
}
else
grouped.push(test[i]);
}
return grouped;
}
var series = ["a", "b", "d", "e", "f", "g", "h", "i", "l", "u", "ü"];
console.log(someMagicFunction(series));
您可以在JSBin上查看结果:http://jsbin.com/kigozelaji/1/edit?js,console