我正在尝试获取数组的随机值。经典系统是这样的:
tmpArray[Math.floor(Math.random()*tmpArray.length)];
但我的阵列不是这样的:
Array[0, 1, 2, 3, 4]; //length 5
但是这样!
Array[123, 444, 1234, 10000, 12345]; //length 12346
我想从中获取一个随机值,但是随机存在一个值。
有什么想法吗? (仅限纯JS或jQuery)
)
答案 0 :(得分:1)
使用稀疏数组,您可以过滤现有项目,然后从中获取随机值。
var array = [1, , , , 2, , , , , , 3, , , , , , , 4, , , , 5, , , , , 6, , , , , , 7],
temp = array.filter(_ => true);
console.log(temp);
console.log(temp[Math.floor(Math.random() * temp.length)]);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
映射所有未经过分析的索引
var array = [1, , , , 2, , , , , , 3, , , , , , , 4, , , , 5, , , , , 6, , , , , , 7],
indices = array
.map((_, i) => i) // map indices, got sparse array
.filter(_ => true); // filter sparse items
console.log(indices);
console.log(array[indices[Math.floor(Math.random() * indices.length)]]);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
您可以在数组中存储未定义的数组元素的索引,使用相同的过程来获取索引数组的元素以括号表示法设置
let indexes = [123, 444, 1234, 10000, 12345];
let index = indexes[Math.floor(Math.random() * indexes.length)];
let res = tmpArray[index];
答案 2 :(得分:0)
试试这个:
var tmpArray = new Array(123, 444, 1234, 10000, 12345);
之后,这将有效:
tmpArray[Math.floor(Math.random()*tmpArray.length)];
为了更好地解释这里发生的事情,你可能将变量设置为键123上的数组,这实际上是数组中的第123位:
tmpArray[123] = {somekey: 'someval'};
然后tmpArray.length将为124(计数为0)
如果您正在创建数组动态使用push on array将对象推送到数组,如果您需要可以使用的密钥,那么有一个很好的解决方案:
tmpArray.push({number: 123, somekey: 'someval'})
tmpArray.push({number: 1234, somekey: 'someval2'})
然后你可以很容易地找到你需要的东西:
tmpArray.find(x=>x.number===123) //this will fetch wanted object