从数组中获取随机抽样的项目,其中项目(也是数组)的事情总量为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

然后拉出一个元素,直到它达到最大极限。

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干杯。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

VBA中的SAP脚本无法激活从SAP中自动导出的工作簿。

2022-5-11 10:00:13

解决方案

如何基于数据属性(jQuery)获取特定的HTML元素。

2022-5-11 10:00:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索