如何列出字母组?

时间:2015-05-05 13:16:32

标签: javascript jquery

如果我有一系列信件:

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-ü"
]

这很容易吗?

注意:可能还有以下字符:ö,ä,ü,ß等。

1 个答案:

答案 0 :(得分:0)

我可以建议一个基本的“神奇功能”解决方案。我希望你能更多地了解你所尝试的内容,或者至少有一些关于解决方案的思考方向。我也不清楚特殊字符应该如何工作,比如,它们应该被包含在正常字母表中吗?

无论如何,我的建议是按顺序创建一个包含所有字母表的数组,包括你需要/想要它们的特殊字母。然后,迭代你的“一系列字母”数组(称之为test),并为其中的每个字符检查alphabet数组中的索引是否正好在字符的索引之后在test数组中出现在它之前。如果没有,您可以将它推入另一个数组的新空间(称之为grouped)。

如果是(如果角色出现在alphabettest中的同一个前一个元素之后),则进行另一次检查以查看之后的字符 > 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