javascript - 从数组中删除一个随机对象并返回它

标签 javascript arrays filter

我想从对象数组中检索一个随机对象,返回该对象,然后从数组中删除该对象。我的代码很好,但我敢打赌有一种更简洁的方式来做到这一点。这是我的版本:

let deck = [{...}, {...}, {...}];
function returnCard(deck) {
  let element = deck[Math.floor(Math.random() * deck.length)];
  removeCard(element);
  return element;
}
function removeCard(card) {
  deck = deck.filter(function(el) {
    return el.name !== card.name;
  });
}

这看起来很冗长。我认为我正在努力解决的部分问题是我想返回或重新分配两件事,即卡牌和牌组。

最佳答案

您可以使用Array#splice方法从数组中删除元素。该方法也恰好将删除的元素作为数组返回;如果您只删除单个元素,则可以访问返回值上的索引0,本质上从列表中“弹出”单个随机元素。

function popRandom (array) {
  let i = (Math.random() * array.length) | 0
  return array.splice(i, 1)[0]
}

let array = ['A', 'B', 'C', 'D']

console.log(popRandom(array))
console.log(array)

关于javascript - 从数组中删除一个随机对象并返回它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42591276/

相关文章:

放大和缩小时 Javascript 动画无法正常工作

javascript - 使用 underscore.js 在深度嵌套的 JSON 中查找值

javascript - 如何按子数组中的第一项对数组进行排序

arrays - jq:选择列表中的.attribute

r - 如何基于应用于大量列的 "not equal to"标准对数据帧进行子集化?

javascript - 当我尝试访问参数时变得不确定

javascript - 如何解决 youtube 嵌入视频全屏按钮不显示的问题?

javascript - Javascript 中如何求交间隔?

scala - 在 Scala 中使用基于类型的过滤器时如何获得正确的返回类型

c++ - OpenCV 中的像素化实现