You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从长度为2624的Myjson数组中获取20个随机条目?

从长度为2624的JSON数组中获取20个随机条目

根据你的需求,分两种场景给出解决方案:

场景1:获取连续的20个随机条目

如果需要的是数组中某一段连续的20个元素,只需要先确定一个合法的起始索引,再直接计算结束索引即可(保证两者差值为20):

// 计算合法的起始索引:范围是0到数组长度-20,避免越界
const startIndex = Math.floor(Math.random() * (Myjson.length - 20));
// 结束索引 = 起始索引 + 20,slice左闭右开,刚好取20个元素
const endIndex = startIndex + 20;

{Myjson.slice(startIndex, endIndex).map((item) => (
  <Link
    href={item.ud}
    key={item.id}
  >
    {item.test}
  </Link>
))}

注意:数组索引从0开始,你之前代码里的+1会导致可能取到超出数组范围的索引(比如当Math.random()接近1时,xxx会变成2624,而数组最大索引是2623),所以要去掉这个+1,同时限制起始索引的最大值为数组长度-20,确保endIndex不会超出数组边界。

场景2:获取不重复的20个随机分散条目

如果需要从整个数组中随机挑选20个不连续、不重复的元素,可以用以下两种方法:

方法1:Fisher-Yates洗牌法(高效且无重复)

先对数组进行洗牌,再取前20个元素:

// 复制原数组避免修改原数据
const shuffled = [...Myjson];
// Fisher-Yates洗牌算法
for (let i = shuffled.length - 1; i > 0; i--) {
  const j = Math.floor(Math.random() * (i + 1));
  [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
}
// 取前20个
const random20 = shuffled.slice(0, 20);

{random20.map((item) => (
  <Link
    href={item.ud}
    key={item.id}
  >
    {item.test}
  </Link>
))}

方法2:随机索引去重法

通过生成随机索引并去重,直到凑够20个:

const randomIndexes = new Set();
// 生成20个不重复的随机索引
while (randomIndexes.size < 20) {
  const index = Math.floor(Math.random() * Myjson.length);
  randomIndexes.add(index);
}
// 根据索引获取对应元素
const random20 = [...randomIndexes].map(idx => Myjson[idx]);

{random20.map((item) => (
  <Link
    href={item.ud}
    key={item.id}
  >
    {item.test}
  </Link>
))}

内容的提问来源于stack exchange,提问作者a3egd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:07:30