Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中对句子中的单词进行无序排列(编写恐怖代码-如何改进?)_Javascript_Shuffle - Fatal编程技术网

在javascript中对句子中的单词进行无序排列(编写恐怖代码-如何改进?)

在javascript中对句子中的单词进行无序排列(编写恐怖代码-如何改进?),javascript,shuffle,Javascript,Shuffle,我试图做一些相当简单的事情,但是我的代码看起来很糟糕,我确信有更好的方法用javascript来做事情。我是javascript新手,正在努力改进我的编码。这感觉很乱 我想做的就是随机改变网页上某些单词的顺序。在python中,代码如下所示: s = 'THis is a sentence' shuffledSentence = random.shuffle(s.split(' ')).join(' ') 然而,这就是我在javascript中设法产生的怪物 //need custom sor

我试图做一些相当简单的事情,但是我的代码看起来很糟糕,我确信有更好的方法用javascript来做事情。我是javascript新手,正在努力改进我的编码。这感觉很乱

我想做的就是随机改变网页上某些单词的顺序。在python中,代码如下所示:

s = 'THis is a sentence'
shuffledSentence = random.shuffle(s.split(' ')).join(' ')
然而,这就是我在javascript中设法产生的怪物

//need custom sorting function because javascript doesn't have shuffle?
function mySort(a,b) {    
    return a.sortValue - b.sortValue;
}

function scrambleWords() {

    var content = $.trim($(this).contents().text());

    splitContent = content.split(' ');

    //need to create a temporary array of objects to make sorting easier
    var tempArray = new Array(splitContent.length);

    for (var i = 0; i < splitContent.length; i++) {
        //create an object that can be assigned a random number for sorting
        var tmpObj = new Object();
        tmpObj.sortValue = Math.random();
        tmpObj.string = splitContent[i];
        tempArray[i] = tmpObj;       
    }

    tempArray.sort(mySort);

    //copy the strings back to the original array
    for (i = 0; i < splitContent.length; i++) {
        splitContent[i] = tempArray[i].string;
    }

    content = splitContent.join(' ');       
    //the result
    $(this).text(content);      

}
//需要自定义排序函数,因为javascript没有洗牌功能?
函数mySort(a,b){
返回a.sortValue-b.sortValue;
}
虚词{
var content=$.trim($(this.contents().text());
splitContent=content.split(“”);
//需要创建一个临时的对象数组以使排序更容易
var tempArray=新数组(splitContent.length);
对于(var i=0;i

你能帮我简化一下吗?

几乎与python代码相似:

var s = 'This is a sentence'
var shuffledSentence = s.split(' ').shuffle().join(' ');
为了使上述方法起作用,我们需要向数组中添加一个shuffle方法(使用)


此代码未经测试,但它是一个替代方法的粗略概念:

function scrambleWords(text) {
  var words = text.split(' ');
  var result = "";

  while(words.length > 0) {
    if(result.length > 0) { words += " "; }
    words += words.splice(Math.abs(Math.random() * (words.length - 1)), 1);
  }

  return result;
}
基本上,这个想法是从原始文本中随机拼接出单词并重建字符串

注意:splice有点慢(重建阵列),所以如果性能很重要,我不认为这是最佳的,但我认为代码更简单

更新:我更喜欢刚才作为更好的解决方案发布的洗牌答案:D

String.prototype.shuffler=function(delim){
    delim=delim || '';
    return this.split(delim).sort(function(){
            return .5-Math.random()}).join(delim);
}
//要洗牌单词,请传递空格

var s='abc def ghi jkl mno pqr stu vwx yz'
警惕(s.shuffler(“”))

这是一个非常老的问题,但仍然有用。
使用
array.sort()

const s='这是一个非常古老的问题,但仍然有用';

console.log(s.split('').sort(()=>Math.floor(Math.random()*Math.floor(3))-1.使用排序方法和数学方法连接('')

var arr =  ["HORSE", "TIGER", "DOG", "CAT"];
function shuffleArray(arr){
  return arr.sort( () => Math.floor(Math.random() * Math.floor(3)) - 1)  
}

// every time it gives random sequence
shuffleArr(arr);
// ["DOG", "CAT", "TIGER", "HORSE"]
// ["HORSE", "TIGER", "CAT", "DOG"]
// ["TIGER", "HORSE", "CAT", "DOG"]

这可能很有趣:我认为这段代码不太管用,如果真的管用的话,它仍然是一个非常缓慢且有偏见的洗牌,这意味着每种可能的排列不会有同样的可能性。很好,但是比Fisher-Yates慢。-1:在排序比较函数中使用随机值会导致不正确的随机列表,因为排序依赖于这样一个事实:如果aI==0,我只需返回
this
。否则,fluent界面将中断。
var arr =  ["HORSE", "TIGER", "DOG", "CAT"];
function shuffleArray(arr){
  return arr.sort( () => Math.floor(Math.random() * Math.floor(3)) - 1)  
}

// every time it gives random sequence
shuffleArr(arr);
// ["DOG", "CAT", "TIGER", "HORSE"]
// ["HORSE", "TIGER", "CAT", "DOG"]
// ["TIGER", "HORSE", "CAT", "DOG"]