在一个数组中,如。
const myList = [['hi'], ['hello', 'bye'], ['ok'], ['blue', 'green', 'purple'], ['big', 'small', 'medium', 'orange', 'sky', 'ground', 'earth'], ['king', 'queen'], ['desk']]
我怎么能得到一个 随机抽样 数组中,但总数应该由输入变量 size
.
所以,如果… size = 3
,将返回一个数组,如
[['desk'], ['king', 'queen']]
或者
[['blue', 'green', 'purple']]
甚至
[['ok'], ['desk'], ['hi']]
如果 size
大于扁平化的myList中的项目数,那么它应该只返回最大可用项目数。
我一直想不通,怎么才能做到这一点呢?
解决方案:
我建议你用这样的函数对数组进行洗牌。
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
shuffled_arr = shuffle(shuffled_arr); // assign and shuffle the data to this arr
然后拉出一个元素,直到它达到最大极限。
var shuffled_arr = shuffle(myList); // to shuffle the data
var results_arr = [];
var maximum_len = 3;
var current_len = 0;
for (let i = 0; i < shuffled_arr.length; i++)
{
if(current_len == maximum_len) break;
if(current_len + shuffled_arr[i].length <= maximum_len)
{
current_len+= shuffled_arr[i].length;
results_arr.push(shuffled_arr[i]);
}
}
最后你会得到一个包含X个随机字符串的数组results_arr。
你可以在这里检查我的小把戏 – https:/jsfiddle.net2ds4vxqp干杯。