从数组中获取项目的随机样本,其中项目(也是数组)的总和为 X

拉吉

在一个数组中,例如:

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

然后拉1个元素直到达到最大限制。

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.net/2ds4vxqp/干杯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章