我从GitHub获得了一个脚本,但脚本是随机的:https://github.com/dcbriccetti/name-picker
我尝试在静态shuffle(a)上编辑picker.js。
我不希望它按升序或降序排列,也不能选择使其不随机,所以我想自己设置。
这是picker.js代码:
class Picker {
constructor() {
this.speech = window.speechSynthesis;
this.utterance = new SpeechSynthesisUtterance();
this.cardSpace = [];
$('#start').click(() => {
const maxCalls = $('#max-calls').val();
const names = $('#names').val().split('\n');
this.cardSpace = [];
names.map(name => name.trim()).filter(name => name.length > 0).forEach(name => {
for (let i = 0; i < maxCalls; ++i) {
this.cardSpace.push(new NameCard(name));
}
});
Picker.shuffle(this.cardSpace);
});
$('#pick').click(() => {
this.cardSpace = this.cardSpace.filter(card => card.state === card.States.NORMAL);
if (this.cardSpace.length) {
const chosenIndex = Math.floor(Math.random() * this.cardSpace.length);
const card = this.cardSpace[chosenIndex];
card.pick();
$('#chosen').text(card.name);
if ($('#speak').prop('checked')) {
this.utterance.text = card.name;
this.speech.speak(this.utterance);
}
}
});
}
static shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i], a[j]] = [a[j], a[i]];
}
}
}
答案 0 :(得分:0)
如果要升序或降序排序,则需要具有一个比较器函数,该函数根据一次比较两个名称返回1、0或-1。然后,将其提供给数组的Sub Dump(topLeftCell As Range, sCaption$, wordcnt#, cnt#, Optional is_divide = False)
topLeftCell.Resize(, 3) = Array(sCaption, cnt, Round(wordcnt / (cnt / IIf(is_divide, 2, 1)), 2))
End Sub
Sub Test()
Call Dump([A1], "Commas", 100, 50)
End Sub
方法。 MDN Docs on Sort
例如,您可以考虑在比较器如下所示的情况下考虑调用.sort()
,而不是在代码中调用Picker.shuffle()
:
this.cardSpace.sort(comparer)
那将升序排列(所以b在a之后)。如果要对降序进行排序,则可以将返回值乘以-1(例如,基于变量或设置)。
答案 1 :(得分:0)
要以默认顺序(而不是随机的)将其注释掉,请将该行注释掉:
Picker.shuffle(this.cardSpace);
然后要进行精细控制,只需控制将项目添加到cardSpace的顺序(这就是this.cardSpace.push(new NameCard(name));
行的工作)。
要以相反的顺序使用,请将Picker.shuffle
行替换为:
this.cardSpace.reverse()
(请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse)