我得到了一个每X分钟/小时执行一次的函数,当它执行时,它将选择一个随机的数据库数组值,当它这样做时,被选中的将得到+ 1。Selected表示该行被选中的次数。
id: 5 name: tom selected: 17
id: 8 name: tim selected: 12
id: 2 name: tombie selected: 5
id: 3 name: timbie selected: 4
这是我的代码,我从中捕获所有的数据库值
function setValue (value) {
console.log("Array", value);
result_arr = Object.values(JSON.parse(JSON.stringify(value)));
return result_arr;
}
console.log("arr", result_arr);
db.connect(function(err) {
db.query("SELECT * FROM developers", (err, result, fields) => {
if (err) {
console.log(err);
} else {
// selected = all.map(item => item.selected);
console.log("result", result);
setValue(result);
console.log("value", setValue(result));
removeMax()
}
})
假设我们已经选择了:5,4,12和17。17是最高选择计数,为了避免它获得更多的选择点,我确保从数组中删除最高数字。一旦最大的数字被删除,我洗牌的数字,它将选择一个随机的。
function removeMax() {
const max = Math.max(result_arr.map(item => item.selected));
const newArr = result_arr.map(item => item.selected).filter(number => number !== max);
var shufflearray = newArr[Math.floor(Math.random()*newArr.length)];
return shufflearray;
}
假设从洗牌中我得到5。现在我要给这个加1,所以5必须变成6
在函数hi()中,我有一个If语句,每天上午8点必须执行此代码。如我所说,我必须更新所选值。
问题来了通常我会做UPDATE developers SET selected = 6 WHERE id = 2。但因为我有多行,这不会工作。今天可能是蒂姆比,明天也可能是蒂姆。如何将所选值与其id链接起来?
function hi() {
window.setInterval(function(){
var date = new Date();
if (date.getHours() === 8 && date.getMinutes() === 0) {
if (test) {
db.query( `UPDATE developers SET selected = ? WHERE id = ${item.id} `,[selected, id],
(err, result) => {
if (err) {
console.log(err);
} else {
res.send(result);
}
});
}
}
else {
const abort = "abort"
}
}, 60000);
}
在removeMax()函数中,数据被简化为仅为所选值的列表。你需要保存每一项,而不仅仅是它被选中的次数。
原始代码:
function removeMax() {
const max = Math.max(result_arr.map(item => item.selected));
const newArr = result_arr.map(item => item.selected).filter(number => number !== max);
var shufflearray = newArr[Math.floor(Math.random()*newArr.length)];
return shufflearray;
}
原始结果:var result_arr = [{'id': 1, 'selected': 10}, {'id': 2, 'selected': 5}, {'id': 3, 'selected': 15}, {'id': 4, 'selected': 7}]
newArr = result_arr.map(item => item.selected)
resulting newArr: [10, 5, 15, 7]
之后,您将删除最大的值。注意到所有id都消失了吗?
如果你这样做:
newArr = result_arr.filter(item => item.selected !== max)
resulting newArr: [{id: 1, selected: 10}, {id: 2, selected: 5}, {id: 4, selected: 7}]
现在您有了一个对象数组,您可以像以前一样重新排列它们,然后使用item.selected访问selected的#。,每个id为item.id.