javascript - 从 items[] 数组中选择九个已打乱顺序且不重复的项目

标签 javascript

我正在尝试从数组 item[] 中选择一个九个数字项目,该项目已打乱且没有重复项。

但我的代码选择了超过九个,并且有重复

我如何将其更改为只有九个,没有重复并且

怎么可能

我必须做出什么改变才能使其成为可能?

window.onload = rnumber();
function rnumber() {
  const
    items = [  
      { label: '1', url: '1.jpg'  },
      { label: '2', url: '2.jpg'  },
      { label: '3', url: '3.jpg'  },
      { label: '4', url: '4.jpg'  },
      { label: '5', url: '5.jpg'  },
      { label: '6', url: '6.jpg'  },
      { label: '7', url: '7.jpg'  },
      { label: '8', url: '8.jpg'  },
      { label: '9', url: '9.jpg'  },
      { label: '10',url: '10.jpg' }
          ];

  
var lastnumber=0;
for (let index = 0; index < 9; index++) 
  {
      randomIndex = Math.floor(Math.random() * items.length);
      
	 if(lastnumber!=randomIndex)
	 {
      item = items[randomIndex];
      lastnumber=randomIndex;
	  
	  console.log(item);
	  }
	  else
	  {
	  rnumber();
	  }
	  	 
  }

}

最佳答案

您需要选择不替换的项目。您可以在选择项目时从 items 数组中删除随机选择的项目:

window.onload = rnumber();

function rnumber() {
  const items = [  
      { label: '1', url: '1.jpg'  },
      { label: '2', url: '2.jpg'  },
      { label: '3', url: '3.jpg'  },
      { label: '4', url: '4.jpg'  },
      { label: '5', url: '5.jpg'  },
      { label: '6', url: '6.jpg'  },
      { label: '7', url: '7.jpg'  },
      { label: '8', url: '8.jpg'  },
      { label: '9', url: '9.jpg'  },
      { label: '10',url: '10.jpg' }
          ];

  const randItems = Array.from(
    { length: 9 },
    () => {
      const randomIndex = Math.floor(Math.random() * items.length);
      const [item] = items.splice(randomIndex, 1);
      return item;
    }
  );
  console.log(randItems);
}

请注意,这将改变原始items数组。如果您想保留它(就像一副可以稍后重复使用的牌),请先将其切片以进行复制,然后对切片副本进行变异;

const slicedItems = items.slice();
// ...
const randomIndex = Math.floor(Math.random() * slicedItems.length);
const [item] = slicedItems.splice(randomIndex, 1);

关于javascript - 从 items[] 数组中选择九个已打乱顺序且不重复的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52380397/

相关文章:

javascript - 是否有允许分配/创建的语言功能的名称?

javascript - 是否可以定义任意对象的 bool 值?

javascript - 使用 JavaScriptCore 的 JSContext 时,如何在 JavaScript 中定义不需要特定顺序的类

javascript - JQuery - 从对象排序 DOM

javascript - 在不转换为用户时区的情况下以时区输入显示时间

javascript - 无法使用 Sinon 模拟 http.ServerResponse

javascript - 向我的 Flickity 轮播版本添加 "blinds"过渡

javascript - HTML 插入图像不起作用

javascript - 放置在滚动条内时,JQuery 选择的下拉列表获取 “cut”

javascript - Safari(Mac 和 iOS)不允许名为 "𝝙"的函数。这是否违反规范?