随机将值拼接成数组

时间:2015-02-26 16:25:27

标签: javascript arrays random

我有一个阵列" A"乱码,随机生成的ASCII字符......以及消息" M"。我想将消息M的字符插入到数组A中,以便M的字符顺序完好无损......但随机分布在整个数组A中。

原始数组:zH $ @%@ $#@ $ @ ^^#@(%* $ @ ^& @!$ ^%&

示例输出:zH $ @%@ ^ t $#@ $ @ ^^ h #@(%* $ @ ^& @ i !$ ^%& s 等...

                    var randomChars = [];
                    for(var i=33;i<127;++i) {
                        var letter = document.createElement('span');
                        letter.innerHTML = String.fromCharCode(i);
                        randomChars.push(letter);
                    }

                    var message = "this is a message";
                    var rand = 0;
                    for (var i = 0; i < message.split("").length; i++) {    
                        rand = Math.floor((Math.random() * randomChars.length) + rand);
                        var letters = document.createElement('span');
                        letters.innerHTML = message.split("")[i];
                        letters.setAttribute("hidden","");
                        randomChars.splice(rand, 0, letters); 
                    }

小提琴:https://jsfiddle.net/0ftm2srz/1/

2 个答案:

答案 0 :(得分:3)

使用先前的随机索引作为下一个随机生成的索引的最小值(不包括)。从零开始。

但是,你最终可能会遇到一些勉强混乱的东西。 (!@#!$!@ $#!@#this)但它是随机的。

编辑更好的方法是生成message.length数量的唯一随机索引,按升序排序,然后在message中插入字符乱码阵。

http://jsbin.com/kuzepujabo/1/edit?js,console

答案 1 :(得分:0)

var o = {
   array: "zH$@%@$#@$@^^#@(%*$@^&@!$^%&".split(''),
   msg: "this is a message",
   randomMsgIndex: function () { return Math.floor(Math.random() * this.msg.length); },
   randomMsgChar: function () { return this.msg[this.randomMsgIndex()]; },
   //resultingArray: [],
   randomArrayIndex: function () { return Math.floor(Math.random() * this.array.length); }
}

for(var i = 0; i < o.msg.length; i++) {
  o.array.splice(o.randomArrayIndex(), 0, o.randomMsgChar());
}

console.log(o.array);

我已经想出了这个 - 但我认为它仍然不是你想要的 - 你可能想要一些东西来跟踪已经添加了哪些消息字符 - 所以不要添加它们两次 - 并确保整个消息(它的所有字符都被添加到数组中。

使用上述功能

第2版

var o = {
   array: "zH$@%@$#@$@^^#@(%*$@^&@!$^%&".split(''),
   msg: "this is a message",
   msgArray: function () { this.msg.split(''); },
   randomMsgIndex: function () { return Math.floor(Math.random() * this.msg.length); },
   randomMsgChar: function (i) { return this.msg[i]; },
   //resultingArray: [],
   randomArrayIndex: function () { return Math.floor(Math.random() * this.array.length); },
   stripStr: function (indexToSkip, originalStr) { 
				var result = "";
				for (var i = 0; i < originalStr.length; i++)
					if (indexToSkip != i)
					 result += originalStr[i];

				return result;
   }
}


for(var i = 0; i < o.msg.length; i++) {
  var msgRandomIndex = o.randomMsgIndex();
  o.array.splice(o.randomArrayIndex(), 0, o.randomMsgChar(msgRandomIndex));
  o.msg = o.stripStr(msgRandomIndex, o.msg);
}

console.log(o.array);

我认为它仍然不是100%,而是朝着“优化”解决方案发展: - )