从数组获取非重复索引在 0 时失败
Get non-repeating index from array fails on 0
我有以下函数,它从数组中返回一个随机的非重复索引,不断将它们拉出,直到全部使用完毕,然后重置自身并开始重用它们。
它还确保最后一个拉出的索引与重置时拉出的下一个索引不同,这样您就不会连续出现相同的索引。
var listIndexes = [];
var lastIndex;
function getRandomIndex(indexes)
{
if (!listIndexes.length) {
for (var i = 0; i < indexes; i++) {
listIndexes.push(i);
}
}
var randomIndex = Math.floor(Math.random() * listIndexes.length);
var uniqueIndex = listIndexes[randomIndex];
listIndexes.splice(randomIndex, 1);
if(lastIndex && uniqueIndex == lastIndex)
{
listIndexes = [];
return getRandomIndex(indexes);
}
lastIndex = uniqueIndex;
return uniqueIndex;
}
var index = getRandomIndex(5);
console.log(index);
但是,我发现如果lastIndex
和uniqueIndex
都0
,那么它会返回它,所以我得到索引0
连续返回(无论重置如何),这破坏了条件的要点来防止这种情况。
为什么会这样?打破逻辑的0
有什么特别之处?
lastIndex && uniqueIndex == lastIndex
对于0
来说是假的(参见MDN:Falsy了解更多细节)。
给定的方程对于0
是0 && true
的,这将导致0
。
您很可能应该改用lastIndex !== undefined && uniqueIndex == lastIndex
。因为这样你就会严格比较lastIndex
是设置的还是仍然undefined
尝试执行以下操作
...
var lastIndex = -1;
....
if(lastIndex>-1 && uniqueIndex == lastIndex)
希望对您有所帮助
我对javascript了解不多。也许您对拼接方法有一些问题。https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/splice
它说它是这样使用的:list = list.slice(...);也许另一个答案也是答案的一部分。没有SE,祝你好运;)
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 在JavaScript中通过索引从对象数组中获取值
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- JsFiddle在分叉后描述失败
- 在索引.html和应用.js [node.js] 之间共享变量
- 如何为高图中的区域线创建z索引
- 下拉列表在使用z索引放置在前面后停止工作
- 减去两个索引不同但值相同的整数
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- Javascript:根据对象的嵌套数组中的值,在数组中查找对象的索引
- 从数组获取非重复索引在 0 时失败
- Node.js上特定索引的Elasticsearch快照失败
- Flexslider z索引导航失败
- 在级别3 - Rselenium上递归索引失败
- 如果使用 jquery 进行会话检查在后台失败,如何重定向索引.php页面