从数组中随机选择对
Randomly select pairs from an array
我有一个类似的数组
[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 上
只是为了在这里提供帮助-你可能应该做一些类似@Eric在上的链接
function getRandomSubarray(arr, size) {
var shuffled = arr.slice(0), i = arr.length, min = i - size, temp, index;
while (i-- > min) {
index = Math.floor(i * Math.random());
temp = shuffled[index];
shuffled[index] = shuffled[i];
shuffled[i] = temp;
}
return shuffled.slice(min);
}
var x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
var newArr = getRandomSubarray(x, 6).sort(function(a,b) { return a - b } );
console.log(newArr)
这应该会回报你想要的。虽然这对我来说太大了。使用underscore
function randomSort(a, n) {
return _.take(_.shuffle(a), n).sort(function(a,b) { return a - b } );
}
console.log(randomSort(x, 6))
这里有另一个选项:
function getRandomSorted(arr, limit) {
limit = limit || 1;
var random = [];
for (var i=0; i<limit; i++) {
var rand = arr[0|Math.random() * arr.length];
if (~random.indexOf(rand)){ --i; continue; }
random.push(rand);
}
return random.sort(function(a,b){ return a-b });
}
getRandomSorted(arr, 5);
这将适用于字符串和数字。
相关文章:
- 选择随机图像,检查是否在特定范围内并相应显示
- 从Javascript记录数组中选择随机项,并将其转换为数组
- 从不同的数组中选择随机字符串
- 如何选择随机关键字
- 从列表中选择随机段落
- 选择随机
- 元素
- 如何从 Assoc 数组中选择随机值,然后显示键和值
- 如何从数组中选择随机声音?(JS)
- 从194481可能性中选择随机组合
- 从数组中选择随机项目
- 选择随机选项并执行功能
- 如何从数组中选择随机元素并将其从列表中删除
- 从Javascript嵌套数组/数据结构中选择随机项
- Jquery选择随机单元格每秒钟
- Jquery中根据条件选择随机值
- 在javascript中选择随机、对应数据的最佳方式
- SQL选择随机行
- 从JSON响应中选择随机项
- 选择随机元素
- 从表中选择随机行,然后删除该行并使用该行创建一个新表