gpt4 book ai didi

javascript - 使用下划线/lodash 电子邮件列表/集合随机播放和配对

转载 作者:行者123 更新时间:2023-12-02 17:01:54 25 4
gpt4 key购买 nike

我正在尝试打乱一个对象数组(姓名和电子邮件地址),将其变成给予者 -> 接收者配对数组。每次迭代都会从接收者的集合中删除给予者,因此集合中的每个成员都将获得一个独特的合作伙伴。

我使用了 lodash 并创建了一个 mixin。有时它可以工作,有时它会锁定浏览器。也许我的 while 部分出了问题。

_.mixin({
ldSanta: function (arr) {
var ret = [],
emailListCopy = _.assign(arr),
receiver = {};
_.times(_.size(emailListCopy), function (i) {
receiver = arr[i];
while (receiver === arr[i]) {
receiver = _.first(_.shuffle(emailListCopy));
}
var pair = {
'giver': arr[i],
'receiver': receiver
};
ret[i] = _.extend(pair);
emailListCopy = _.reject(emailListCopy, function (item) {
return item.name === receiver.name;
});
});
return ret;
}
});
例如。 http://jsfiddle.net/ezhsLw16/10

最佳答案

emailListCopy 中剩下的唯一人是 arr 中的最后一个人时,while 循环将永远持续下去。

您可以通过执行以下操作获得您想要的结果:

  1. 打乱数组。这是给予者的数组。
  2. 将其复制到接收器数组。
  3. 将接收器数组偏移 1。
  4. 使用 zip 合并 2 个数组。

通过这样做,您不必检查接收者是否与给予者相同。

_.mixin({
ldSanta: function (arr) {
if (arr.length < 2) {
throw "Invalid input, must have at least 2 people";
}
var givers = _.shuffle(arr);
var receivers = _.clone(givers);
receivers.push(receivers.shift());
var pairs = _.map(_.zip(givers, receivers), function(pair) {
return { giver: pair[0], receiver: pair[1] };
});
return pairs;
}
});

Live Demo (JSFiddle 现在有点慢)

关于javascript - 使用下划线/lodash 电子邮件列表/集合随机播放和配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com