我正在尝试使用Lodash从过滤后的集合中获取随机元素,而没有重复项,但是我不确定从主集合中删除它们的最简洁,最有效的方法(这样就不会有重复项)。
我能够使用_.sample
和_.filter
从过滤的集合中获取随机元素,例如:
let people = [
{name: "Bob", age: 23, gender: "M" },
{name: "Jane", age: 25, gender: "F"},
{name: "James", age: 30, gender: "M"},
{name: "Anna", age: 16, gender: "F"},
{name: "Tom", age: 22, gender: "M"},
{name: "Jess", age: 24, gender: "F"},
{name: "Mike", age: 13, gender: "M"}
]
let randomOver20 = _.sample(_.filter(people, person => person.age > 20))
// randomOver20 = {name: "Jane", age: 25, gender: "F"}
现在,如果我要从经过过滤的集合中获取另一个随机元素,请说:
let randomFemale = _.sample(_.filter(people, person => person.gender === "F"))
// randomFemale = either Jess or Anna.
// Jess should be out of contention, as she was selected from the previous set.
这是获取随机元素并将其从原始集合中删除之后的步骤,我对此有些犹豫。我可以使用_.remove
,但是是否有更高效,更简洁的流程,尤其是当我收集了100多个项目时?