Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中从数组中获取随机X项_Javascript_Jquery_Json_Each - Fatal编程技术网

在javascript中从数组中获取随机X项

在javascript中从数组中获取随机X项,javascript,jquery,json,each,Javascript,Jquery,Json,Each,我有以下使用测试数据的fiddle,并且我正在使用$.each查看数据 我可以循环通过没有问题,但我想循环通过数据,然后从中随机获得3个对象 任何提示或技巧都有助于: 对于下面的问题,它们必须是唯一的**我们可以创建getRandomEntry()函数,该函数将使用Math.random()函数返回数组的一个元素。我们将创建一个循环,它将在每次迭代时接受随机条目 function getRandomEntry() { return testData[Math.round(Math.rand

我有以下使用测试数据的fiddle,并且我正在使用$.each查看数据

我可以循环通过没有问题,但我想循环通过数据,然后从中随机获得3个对象

任何提示或技巧都有助于:


对于下面的问题,它们必须是唯一的**

我们可以创建
getRandomEntry()
函数,该函数将使用
Math.random()
函数返回数组的一个元素。我们将创建一个循环,它将在每次迭代时接受随机条目

function getRandomEntry() {
  return testData[Math.round(Math.random() * (testData.length - 1))];
}

for (var i=0; i<3; i++) {
  var entry = getRandomEntry();
  console.log(entry._id, entry.picture);
}
函数getRandomEntry(){ 返回testData[Math.round(Math.random()*(testData.length-1)); } 对于(var i=0;i-1; }
对于(var i=0;i我们可以创建
getRandomEntry()
函数,该函数将使用
Math.random()
函数返回数组的一个元素。我们将创建一个循环,该循环将在每次迭代时接受随机项

function getRandomEntry() {
  return testData[Math.round(Math.random() * (testData.length - 1))];
}

for (var i=0; i<3; i++) {
  var entry = getRandomEntry();
  console.log(entry._id, entry.picture);
}
函数getRandomEntry(){ 返回testData[Math.round(Math.random()*(testData.length-1)); } 对于(var i=0;i-1; }
对于(var i=0;i,可以使用如下递归函数

请注意,此实现可防止结果重复

函数getRandomObjects(数组、选定、需要){
/*
*@param数组要从中提取的数组
*@param selected array到目前为止提取的结果数组
*@param需要int我们想要的结果数
*/
var length=array.length;
var num=Math.floor(Math.random()*length)+1;//获取数组边界中的随机数
var exists=false;//确保我们尚未拾取此对象
$。每个(选定,功能(i,obj){
如果(对象索引==num)存在=true;
})
如果(存在)getRandomObjects(数组,选中,需要);//如果这是重复的,则获取一个新对象
选择else.push(数组[num]);
if(selected.length!=needed)返回getRandomObjects(array,selected,needed);//如果需要更多,请获取另一个对象
else return selected;//返回最终结果集
}
var testData=[
{
“_id”:“57e5d1a90c4206b128cd8654”,
“索引”:0,
“guid”:“1f3269fc-0822-4c5a-9c52-8055155b407e”,
“isActive”:是的,
“余额”:“$3026.95”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a9a986ccb2f41cf7b9”,
"索引":1,,
“guid”:“a6b726b6-6466-4e48-8697-1c6bd7b1c79e”,
“isActive”:是的,
“余额”:“$2642.74”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a9f98f8b2f6880de32”,
“指数”:2,
“guid”:“e7d736cc-19e0-4bcb-8d0a-4d17442d8cee”,
“isActive”:是的,
“余额”:“$3341.64”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a9e40ded5b017e45cd”,
“指数”:3,
“guid”:“64230ca8-05c0-4c39-a931-794172475a32”,
“isActive”:是的,
“余额”:“$2196.13”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a90cc30be769a06d7c”,
“索引”:4,
“guid”:“d6618b78-753a-4ad0-bc14-3687d0b99196”,
“isActive”:是的,
“余额”:“$1611.62”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57E5D1A92481A43F506067415”,
“指数”:5,
“guid”:“35ec8186-9494-4f89-ab89-bed7f39872c3”,
“isActive”:是的,
“余额”:“$3148.87”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a9164f17c558ba7ce1”,
“索引”:6,
“guid”:“244970a0-1ce2-405a-8d69-c7903f9bf5eb”,
“isActive”:错误,
“余额”:“$3758.13”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a95afde31c5cf592a8”,
“索引”:7,
“guid”:“aa30c82d-dd2b-420c-8b30-7d66cec8d10b”,
“isActive”:是的,
“余额”:“$1311.40”,
“图片”:http://placehold.it/32x32"
}
]
var randomObjects=getRandomObjects(testData,[],3);
console.log(随机对象);

您可以使用如下递归函数

请注意,此实现可防止结果重复

函数getRandomObjects(数组、选定、需要){
/*
*@param数组要从中提取的数组
*@param selected array到目前为止提取的结果数组
*@param需要int我们想要的结果数
*/
var length=array.length;
var num=Math.floor(Math.random()*length)+1;//获取数组边界中的随机数
var exists=false;//确保我们尚未拾取此对象
$。每个(选定,功能(i,obj){
如果(对象索引==num)存在=true;
})
如果(存在)getRandomObjects(数组,选中,需要);//如果这是重复的,则获取一个新对象
选择else.push(数组[num]);
if(selected.length!=needed)返回getRandomObjects(array,selected,needed);//如果需要更多,请获取另一个对象
else return selected;//返回最终结果集
}
var testData=[
{
“_id”:“57e5d1a90c4206b128cd8654”,
“索引”:0,
“guid”:“1f3269fc-0822-4c5a-9c52-8055155b407e”,
“isActive”:是的,
“余额”:“$3026.95”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a9a986ccb2f41cf7b9”,
"索引":1,,
“guid”:“a6b726b6-6466-4e48-8697-1c6bd7b1c79e”,
“isActive”:是的,
“余额”:“$2642.74”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a9f98f8b2f6880de32”,
“指数”:2,
“guid”:“e7d736cc-19e0-4bcb-8d0a-4d17442d8cee”,
“isActive”:是的,
“余额”:“$3341.64”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a9e40ded5b017e45cd”,
“指数”:3,
“guid”:“64230ca8-05c0-4c39-a931-794172475a32”,
“isActive”:是的,
“余额”:“$2196.13”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57e5d1a90cc30be769a06d7c”,
“索引”:4,
“guid”:“d6618b78-753a-4ad0-bc14-3687d0b99196”,
“isActive”:是的,
“余额”:“$1611.62”,
“图片”:http://placehold.it/32x32"
},
{
“_id”:“57E5D1A92481A43F506067415”,
“指数”:5,
“guid”:“35ec8186-9494-4f89-ab89-bed7f3
var randomEntries = [];

function getRandomEntry() {
  return testData[Math.round(Math.random() * (testData.length - 1))];
}

function entryExists(entry) {
  return randomEntries.indexOf(entry) > -1;
}

for (var i=0; i<3; i++) {
  var entry;

  do {

    entry = getRandomEntry();

  } while(entryExists(entry))

  randomEntries.push(entry);
  console.log(entry._id, entry.picture);
}
var items = [1, 2, 3, 4, 5];
var newItems = [];

for(var i = 0; i < 3; i++) {
    var idx = Math.floor(Math.random() * items.length);
    newItems.push(items[idx]);
    items.splice(idx, 1);
}

console.log(newItems);