表示多个数组的唯一索引的数字
Number that represents the unique index of many arrays
我有一个应用程序,它接受多个数组的数据,每个数组的长度都是可变的。我计划循环并显示我给出的每个数组的每个数据组合。我的第一个想法是用一个数字来表示每个数组的状态,因为我知道组合的数量是每个数组元素数量的乘积。
例如:
A = [0,1,2,3]
B = [0,1,2,3]
C = [0,1]
所以我需要表示4 x 4 x 2 = 32种组合
我已经设法通过使用每个数组长度对给定索引应用模和除法来表示所有状态。我的问题是它不能很好地排序(参见下面的代码片段)。有没有人解决了类似的问题,或者知道我如何改变算法来得到它的顺序?
function multiArrayIndex(index, ...args) {
var arrays = args.slice();
var output = [];
for (var i = 0, curIndex = index; i < arrays.length; i++) {
var curArray = arrays[i];
var valueIndex =(curIndex % curArray.length);
output.push(curArray[valueIndex]);
curIndex = Math.ceil(curIndex / curArray.length);
}
return output;
}
demoP = document.getElementById("demo");
for(var i = 32; i>=1; i--){
demoP.innerHTML = demoP.innerHTML + i + " - " + multiArrayIndex(i, [0,1,2,3], [0,1,2,3], [0,1] ) + "<br />";
}
<p id="demo"></p>
在我看来,保持索引分开将是一个更好的方法。
增加索引的工作方式与我们在小学时手工添加两个数字的方式有点类似——如果索引太大,将其设置为零,然后逐个增加下一个:
var a = [0, 1, 2, 3]
var b = [0, 1, 2, 3]
var c = [0, 1]
var state = {
a: 0,
b: 0,
c: 0
}
function increment() {
state.a++;
if (state.a >= a.length) {
state.b++;
state.a = 0;
}
if (state.b >= b.length) {
state.c++;
state.b = 0;
}
if (state.c >= c.length) {
state.c = 0;
}
console.log(state);
}
console.log(state);
<button onclick='increment()'>Increment</button>
基于state
的文档更新从这里开始应该是微不足道的。
相关文章:
- 创建具有2个唯一数字的Javascript数组
- Javascript:编写一个函数,接收一个数组,然后返回一个只有唯一数字的数组,只删除数组
- 从数组中获取最高但也是唯一的数字
- Nodejs 生成短的唯一字母数字
- Javascript:生成唯一数字字符串的最佳方法是什么
- 将一个元素与一个唯一的数字相关联
- 唯一数字的正则表达式
- 迭代和选择那些唯一的数字(jQuery)
- 具有唯一结果的两个数字组合的精简算法
- 表示多个数组的唯一索引的数字
- 为数据库生成唯一的随机alpha数字随机字符串
- c# .net中用户的字母数字8位唯一id
- Javascript每次都会生成随机的唯一数字
- 使用javascript生成唯一的随机字母数字
- 输入唯一的数字在文本框由javascript onkeypress问题
- 根据Javascript中的字符串输入生成唯一的数字
- 数组中的第一个唯一数字.需要优雅的解决方案
- 如何在javascript中获得纯粹唯一的数字
- Node.js, mongo快速保存唯一数字的方法
- 生成20位数字间隔的唯一且可逆的id