从数组中获取随机值并在 DOM 中发布

Posted

技术标签:

【中文标题】从数组中获取随机值并在 DOM 中发布【英文标题】:Get random values from array and post in DOM 【发布时间】:2021-12-24 06:12:29 【问题描述】:

我花了很长时间研究如何从对象和数组中获取随机值,但我似乎无法辨别如何实现这一点。我有这个代码,它将容纳多达一百个不同的评论,并带有相应的凭据。我怎样才能 a) 每次页面刷新时,随机抽取一组包含所有相应数据的四个评论(必须是唯一的) b) 通过 DOM 在 html/CSS 中发布这些评论

这是基本代码:

var reviews = [

 content: "content of review", // no need to have html there even.
 by: "name of reviewer or initials",
 stars: 5, // default, no need to specify to every item
 source: "Google Play",  // default, no need to specify to every item
,

 content: "content of review", // no need to have html there even.
 by: "name of reviewer or initials",
 stars: 5, // default, no need to specify to every item
 source: "Google Play",  // default, no need to specify to every item
,
etc.etc
];

【问题讨论】:

这个回答你的问题***.com/questions/4550505/… Take N random elements from an array 在 *** 上有几个答案。 “通过 DOM 发布 HTML”的第二个问题取决于你想给他们什么格式。再次重申,您可以在 SO 上找到多种方法。 我已经尝试过 Faizal 的解决方案。 Balastrong 我已经花了几个小时试图为我的确切情况找到正确的解决方案。找到了一些接近但丢失的部分太大而无法完全适合我的情况,而且我没有足够的经验来自己做。 【参考方案1】:

我首先想到的是有一个函数,它返回一个包含 n 个唯一元素的数组(在你的例子中,n = 4)

const randomElementsFromArray = (amountOfElements, array) => 
  const arrayWithSelectedElements = [];
  while (arrayWithSelectedElements.length !== amountOfElements) 
    const randomIndex = Math.floor(Math.random() * array.length);
    const chosenElement = array[randomIndex];
    if (!arrayWithSelectedElements.includes(chosenElement)) 
      arrayWithSelectedElements.push(chosenElement);
    
  

  return arrayWithSelectedElements;
;

它需要你想要选择的元素数量和你想要选择的数组。

一个缺点是循环运行的次数不一致,但它应该可以解决问题。

编辑:射击,我忘了问题还有第二部分。

如果您没有使用任何 JS 框架,例如 React,并且您想在纯 JS 中执行此操作,您将创建另一个函数来循环从 randomElementsFromArray 返回的数组中的元素(或使用 .map 方法返回的数组)并创建元素及其内容,并将它们添加到 DOM。

【讨论】:

以上是关于从数组中获取随机值并在 DOM 中发布的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中获取值并在zend框架工作中分配给视图

PHP 如何从 AJAX 调用中发布多个数组/json 值并在同一个 SQL 查询中运行它们?

来自不同数组的不同值并在表中并排附加在一起

从数组中获取前两个值并运行 foreach

如何从文本文件中获取值并输入到二维数组中? C++

从Mongo DB嵌套数组中获取不同的值并输出到单个数组