【发布时间】:2019-04-06 19:26:41
【问题描述】:
我有一张卡片列表,其中包含“套装”中的口袋妖怪卡片。数据以 JSON 格式检索(格式化/查询不在我的控制范围内)。
let myList = `
[{'hand': '1', 'cards': {'charmander','pikachu','squirtle'}},
{'hand': '2', 'cards': {'charmander','gyarados','jigglypuff'}},
{'hand': '3', 'cards': {'balbasaur','blastoise','mankey'}}]
`;
我不确定我可以利用什么来在该列表中找到唯一手牌,即手牌 3 将是唯一手牌,因为它不包含其他手牌中的任何其他牌。
我创建了一个地图并使用将每个 hand 转换为用作键的字符串,然后检查键是否已存在。但是根据上面的数据,我不确定如何确保手牌 3 是真正独特的手牌,因为其他牌中不存在其他牌。
cards = JSON.parse(myList);
let cardMap = new Map();
cards.map((hands) => {
let handAsStr = hands.cards.toString();
let matchingValue = cardMap.has(handAsStr);
if (matchingValue) {
console.log("Entry exists - Not adding " + handAsStr );
}
else {
console.log("Adding: " + handAsStr )
cardMap.set(handAsStr , {hand: hands.hand});
}
});
我考虑将名称转换为十六进制值,然后搜索该十六进制值是否存在于其他任何地方,但这似乎令人生畏且效率低下。
任何指针?
【问题讨论】:
-
将
myList转换为数组本身就是一项艰巨的任务。您正在使用单引号,并且卡片有{}包装而不是[]。JSON.parse()不起作用 -
您正在为您的卡片使用无效的对象,您想使用数组来代替吗?
标签: javascript arrays dictionary search