【问题标题】:Randomizing without duplicating multiple times随机化而不重复多次
【发布时间】:2016-10-12 12:04:47
【问题描述】:

我有以下任务要执行。我得到一个字符串,我必须将其反向写入,并将单词随机化以形成 5 个不同的字符串。我已经设法将字符串反向编写并随机化单词,但我无法做到 5 次。这是代码。

var x = "Lorem ipsum dolor sit amet";
var wordsArray = x.split(" ");


function wordsReverse(allWords){
    var otherArray = [];
    for ( var i = allWords.length-1; i >= 0; i--) {
        otherArray.push(allWords[i]);
    }
    return otherArray;
}

function createRandomText(text){
    var randomArray = [];
    var randomText = null;
    for ( var j = 0; j < 5; j++) {
        for ( var k = 0; k < text.length; k++) {
            randomText = text[Math.floor(Math.random()*text.length)];
            if ( text[randomText] === undefined ) {
                randomArray.push(randomText);
                text[randomText] = true;
            }

        }   
    }

    return randomArray;
}

console.log(wordsReverse(wordsArray).toString().replace(/\,/g, ' '))
console.log(createRandomText(wordsArray).toString().replace(/\,/g, ' '))

感谢您的帮助。

【问题讨论】:

  • 你为什么要这样做 -> .toString().replace(/\,/g, ' ')) 而不是 .join('') ?,你每次都从数组中删除元素,所以什么都没有了。所以你可能想先克隆阵列,然后解决这个问题。或者创建一个 Object 文字来存储您使用的内容。

标签: javascript string random


【解决方案1】:

循环它直到你得到所有 5 个随机字符串。如果字符串不在数组中,则循环返回。

var randomArray = [];

While(randomArray.length != 5){
   wordsReverse(wordsArray).toString().replace(/\,/g, ' ');
   var str = createRandomText(wordsArray).toString().replace(/\,/g, ' ');
   if(randomArray.indexOf(str) < -1) {
     randomArray.push(str);
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    相关资源
    最近更新 更多