JS数组拼接由于某些原因没有删除索引
JS array splice don't remove the index for some reason
这是我要发送的代码:
for (var com = 0; com < 10; com++) {
var op = [0, 1, 2, 3];
combo = op[Math.floor(Math.random() * op.length)];
door1[com] = combo;
op.splice(combo, 1);
combo = op[Math.floor(Math.random() * op.length)];
door2[com] = combo;
op.splice(combo, 1);
combo = op[Math.floor(Math.random() * op.length)];
door3[com] = combo;
op.splice(combo, 1);
combo = op[Math.floor(Math.random() * op.length)];
door4[com] = combo;
eim.print(op.toString());
}
现在当我打印op数组时。我应该只得到一个值,因为我已经删除了其他的索引。用剪接。但当我打印结果10次时。我发现有些索引没有被删除。我尝试着创造4种不同的连击。每个组合都是不同的
你正在做的是,
Array.splice(combo,1);
现在它试图做的是拼接数组中索引为combo
的元素,现在combo可以是任何值,而不是索引。
你可以通过索引试试,FIDDLE
代码:
door1={}
door2={}
door3={}
door4={}
var index=null;
for (var com = 0; com < 10; com++) {
var op = [0, 1, 2, 3];
index=Math.floor(Math.random() * op.length)
combo = op[index];
door1[com] = combo;
op.splice(index, 1);
index=Math.floor(Math.random() * op.length)
combo = op[index];
door2[com] = combo;
op.splice(index, 1);
index=Math.floor(Math.random() * op.length)
combo = op[index];
door3[com] = combo;
op.splice(index, 1);
index=Math.floor(Math.random() * op.length)
combo = op[index];
door4[com] = combo;
document.write(op.toString()+'<br>');
}
仅取门数组的拼接元素。Array.prototype.splice
返回一个数组,所以对于一个数组,取第一个元素,索引为[0]
。
door4
的最后一个赋值不需要随机计算,只取数组op
的单个元素。
var combo, com, door1 = [], door2 = [], door3 = [], door4 = [], op;
for (com = 0; com < 10; com++) {
op = [0, 1, 2, 3];
door1[com] = op.splice(Math.random() * op.length | 0, 1)[0];
door2[com] = op.splice(Math.random() * op.length | 0, 1)[0];
door3[com] = op.splice(Math.random() * op.length | 0, 1)[0];
door4[com] = op[0];
}
document.write('door1: ' + door1 + '<br>');
document.write('door2: ' + door2 + '<br>');
document.write('door3: ' + door3 + '<br>');
document.write('door4: ' + door4 + '<br>');
您需要使用项目的索引从数组中删除它,而不是值
var door1 = {},
door2 = {},
door3 = {},
door4 = {};
for (var com = 0; com < 10; com++) {
var op = [0, 1, 2, 3];
door1[com] = getValue(op);
door2[com] = getValue(op);
door3[com] = getValue(op);
door4[com] = getValue(op);
snippet.log(JSON.stringify(op));
console.log(op)
}
function getValue(array) {
var idx = Math.floor(Math.random() * array.length),
val = array[idx];
array.splice(idx, 1);
return val;
}
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
相关文章:
- 在特定索引处剥离/删除数组中的值
- 删除和重用数组索引
- 如何使用Jscript | JQuery在textArea中获取插入的|删除的字符串的索引和长度
- 如何删除cookie错误注意:PHP上的未定义索引
- 删除索引后的数组值
- 如何删除索引中加载的脚本文件中的重复项.html和业力
- 索引数据库:删除功能不起作用
- 使用另一个数组按索引删除数组中的对象
- 数组的逻辑操作以删除索引
- Object.observe 并不总是为我在数组上提供正确的删除索引
- 从 JavaScript 数组中删除索引数组
- 删除索引后的所有项目
- 从数组中删除索引数组
- 数组不断删除索引中的第一个数字
- Javascript关联数组,仅删除索引
- JS数组拼接由于某些原因没有删除索引
- 删除索引网站的代码历史记录?可能的
- 删除索引处的子节点
- 悬停时添加/删除z索引
- 如何使用jquery或javascript删除索引处的行