问题描述
我有一个游戏(javascript),玩家可以在其中收集水果(苹果,香蕉,橙子)。 香蕉的Apple ID为1和2,橙子为3 所有这些信息都记录在sql的一个字段中,该字段在users表中称为“ fruits”。 玩家最多只能收集3种相同种类的水果
例如,如果一个玩家有3个苹果,3个香蕉,1个橙子,它将记录为: 1:3,2:3,3:1
问题是,如果他要收集另一个橙子,则必须这样记录: 1:3,2:3,3:2
但记录如下:
1:3,2:3,3:0,3:1
所以我通过split(“,”)将该字段从String转换为array
但是
回到示例中,我该如何编码以在字段中搜索数字3(即橘子数字)并编辑其后的数字(例如1到2)并保存其余部分(苹果和香蕉的数量) )
知道水果编号在该字段中没有具体安排
可以将其记录为:
2:3,1:3,3:1
取决于玩家是哪个水果先将其收拾的。
解决方法
const IDs = { // Store ID references
"apple" : 1,"banana": 2,"orange": 3,};
const max = 3;
const basket = {};
const collect = (item) => {
if (!IDs.hasOwnProperty(item)) return; // No such item
const id = IDs[item];
if (!basket[id]) basket[id] = 0; // Set to 0 if was not existent
if (basket[id] === max ) { // Throw an error if max
return alert(`You already have ${max} ${item}s`);
}
basket[id] += 1; // Increment if no alerts
};
collect("apple");
collect("banana");
collect("apple");
collect("apple");
collect("apple"); // Should give an error
console.log(basket); // Let's see what we have in the basket so far