gpt4 book ai didi

javascript - 从数组中随机选择对

转载 作者:行者123 更新时间:2023-11-28 11:03:23 27 4
gpt4 key购买 nike

我有一个像这样的数组

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

我想按顺序抓取这些条目中的随机数量,并将它们推送到新数组中直至达到极限。

即例如,如果我输入 (5) - 它会将随机条目排序到新数组中,例如

[1, 4, 7, 10, 12]

我试过了

var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
var newArr = [], num, roll;
//remove number from array
for(var i =0; i < arr.length; i++) {
num = Math.floor(Math.random() * arr.length);
newArr.push(arr[num]);
roll = arr.splice(num, 1);
}

但它并没有真正返回我需要的东西,因为我需要保留顺序。我正在使用下划线,如果有帮助的话?

最佳答案

我认为这就是您想要实现的目标。使用稀疏数组并维护原始元素索引。使用等于或大于所提供数组长度的 count 属性将返回该数组的副本。

Javascript

/*jslint maxerr: 50, indent: 4, browser: true, bitwise: true */
/*global console */

(function () {
"use strict";

function customRand(array, count) {
var length = array.length,
indexes = [],
result = [],
i = 0,
rand,
temp;

while (i < length) {
if (Object.prototype.hasOwnProperty.call(array, i)) {
indexes.push(i);
}

i += 1;
}

i = 0;
length = indexes.length;
while (i < length) {
rand = (Math.random() * i) | 0;
temp = indexes[i];
indexes[i] = indexes[rand];
indexes[rand] = temp;
i += 1;
}

indexes = indexes.slice(0, count).sort(function (a, b) {
return a - b;
});

i = 0;
length = indexes.length;
while (i < length) {
result[indexes[i]] = array[indexes[i]];
i += 1;
}

return result;
}

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];

console.log(customRand(arr, 5));
}());

关于jsfiddle

关于javascript - 从数组中随机选择对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17256668/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com