javascript 如何从这个JSON中获得20个随机项目?

1szpjjfi  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(91)

我使用的是Myjson.slice(1, 20)。我只需要20个来自Myjson的项目,长度为2624,在这段代码中,我试图像这样切片,但我不知道该怎么做才能使xxxyyy之间的差异达到20:

let xxx = Math.floor(Math.random() * 2624 + 1);
  let yyy = Math.floor(Math.random() * 2624 + 1);

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

如何从这个JSON中获得20个随机项目?

lnxxn5zx

lnxxn5zx1#

在第一步中,你可以找到20个随机索引。然后用这些索引创建一个项目数组。最后,渲染20个项目。

const indexes = [];

    while (indexes.length < 20) {
      const index = Math.floor(Math.random() * 2624);
      if (!indexes.includes(index)) {
        indexes.push(index);
      }
    }

    const items = indexes.map((index) => myJson[index]);

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

brccelvz2#

解决办法很简单。

编辑1:修正Fisher-Yates shuffle

// Assume that Myjson.constructor.name === Array.name

// Fisher-Yates Shuffle (in-place)
const a = Myjson;
for (let i = a.length; i-- > 0;) {
  const j = Math.floor(Math.random() * i); // 0 ≤ j ≤ i
 [a[i], a[j]] = [a[j], a[i]];
}

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

相关问题