当我使用splice方法遍历数组时,页面就会冻结。看起来我造成了无限循环。 lib.randomInt()
有效,所以这不是问题。
function() {
return function(string) {
var arr = string.split("")
arr.sort();
for(var i = 0; arr.length;i++){
arr.splice((i+1),0,lib.randomInt(9));
}
var pseudocryptarr = arr.join("");
}
})()("example");
这是来自html
中主文件上方的不同文件var lib = {
factorial: function(num){
function _factorial(num){
if(num === 1){
return 1;
} else {
return num*_factorial(num-1);
}
}
console.log(num+"! = " + _factorial(num));
},
randomInt: function(int,offset){
if(offset == undefined || null || NaN){
offset = 0;
}
return Math.floor(Math.random()*int)+offset;
},
display: function(m, fn){
fn(m);
}
};
答案 0 :(得分:0)
在修改数组本身时你必须反向循环以避免像这样破坏循环......
for (var i=arr.length-1; i>=0; i--){}
答案 1 :(得分:0)
我修好了。我想在每个角色后面都有一个数字。使用预循环数组长度并在迭代两次时将其加倍,意味着拼接在新数字元素之后添加数字,然后添加字符。
编辑:我的错字是问题所在。我甚至不必使用len,只需迭代2。
for(var i = 0;i < arr.length;i+=2){
arr.splice((i+1),0,lib.randomInt(9));
}
(function() {
return function(string) {
var arr = string.split("")
arr.sort();
var len = arr.length
for(var i = 0;i < len*2;i+=2){
arr.splice((i+1),0,lib.randomInt(9));
}
var pseudocryptarr = arr.join("");
console.log(pseudocryptarr);
}
})()("example");
编辑:user4723924方法更好:
(function() {
return function(string) {
var arr = string.split("")
arr.sort();
for(var i = arr.length;i >= 0;i--){
arr.splice((i+1),0,lib.randomInt(9));
}
var pseudocryptarr = arr.join("");
console.log(pseudocryptarr);
}
})()("example");
答案 2 :(得分:0)
我猜你想在每个数组元素之后插入一个随机值,以便字符串&#34;例如&#34;会变得像&#34; e5x9a2m4p7l1e3&#34;
有两个问题:
您的for
循环没有结束条件会变为false。您需要说明i < arr.length
而不仅仅是arr.length
,这对于非空数组来说总是很简单。
您在每次迭代中添加数组元素,但随后也会在下一次迭代中访问它们,从那里您将只访问新插入的值并且永远不会到达保持为1索引的下一个原始元素远离我。您需要再次增加 i 。为此,如果++i
为i+1
参数,则可以使用splice
。
所以你的循环应该是:
for(var i = 0; i < arr.length; i++) {
arr.splice(++i,0,lib.randomInt(9));
}
const lib = { randomInt: n => Math.floor(Math.random()*n) };
(function() {
return function(string) {
var arr = string.split("")
arr.sort();
for(var i = 0; i < arr.length; i++) {
arr.splice(++i,0,lib.randomInt(9));
}
var pseudocryptarr = arr.join("");
console.log(pseudocryptarr);
}
})()("example");
&#13;
或者保存添加内容:
for(var i = 1; i <= arr.length; i+=2) {
arr.splice(i,0,lib.randomInt(9));
}
const lib = { randomInt: n => Math.floor(Math.random()*n) };
(function() {
return function(string) {
var arr = string.split("")
arr.sort();
for(var i = 1; i <= arr.length; i+=2) {
arr.splice(i,0,lib.randomInt(9));
}
var pseudocryptarr = arr.join("");
console.log(pseudocryptarr);
}
})()("example");
&#13;