带图案的随机字母排序

时间:2015-04-14 13:08:41

标签: javascript design-patterns random letters

我想一起得到随机字母,用cvvcv(辅音和元音)等指定模式生成奇怪的单词。没有像需要的那样的辅音变化。

问题是,当我尝试做一个时,我必须指定单词的长度。但是,我希望输出中的字符数在模式中相同。我的意思是长度将由模式的字符数预先定义。

一个小提琴的例子很棒,非常感激。

2 个答案:

答案 0 :(得分:2)

你也可以试试这个:

function replacePattern(pattern) {
    var possibleC = "BCDFGHJKLMNPQRSTVWXZ";
    var possibleV = "AEIOUY";

    var pIndex = pattern.length;
    var res = new Array(pIndex);

    while (pIndex--) {
       res[pIndex] = pattern[pIndex]
         .replace(/v/,randomCharacter(possibleV))
         .replace(/c/,randomCharacter(possibleC));
    }

    function randomCharacter(bucket) {
        return bucket.charAt(Math.floor(Math.random() * bucket.length));
    }   
    return res.join("").toLowerCase();
};

https://jsfiddle.net/u2aooqf7/

答案 1 :(得分:0)

如果你设法用C ++做到这一点,那么在JavaScript中重新创建逻辑就不会有问题。

无论如何,我为你准备了一个小片段:



var createWordFromPattern = function(pattern) {
    var resultStack = [];
    for(var i=0; i<pattern.length; i++) {
        var sign = pattern.charAt(i);
        var signResult = getRandomSubstituteForSign(sign);
        if(signResult !== null) {
            resultStack.push(signResult);
        }
    }
    return resultStack.join("");
}

var getRandomSubstituteForSign = function(sign) {
    var vowels = ['a', 'e', 'i', 'o', 'u'];
    var consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l']; //just added some for demonstration
    
    if(sign === 'c') {
        return consonants[Math.floor(Math.random()*consonants.length)]
    }
    
    if(sign === 'v') {
        return vowels[Math.floor(Math.random()*vowels.length)]
    }
    
    return null;
}

document.write(createWordFromPattern("cvvcv"));
&#13;
&#13;
&#13;

您可以按Run code snippet几次以查看结果。 它非常冗长,缺少许多辅音,但我认为你可以理解如何解决这个问题。

如下所示,它会将模式String中的c转换为辅音数组中的随机条目,并将v转换为元音数组中的随机条目。模式字符串中的每个其他字符都将被忽略。

例如,可以通过添加更多符号的检测来轻松扩展,但这只是为了让您了解如何解决问题。