我正在编写一个程序,通过使用套装和卡片值制作一副纸牌。我正在运行一个for循环的套装和另一个嵌套for循环用于套装循环内的卡并尝试在一个名为“deck”的空数组中打印所有组合(52)。在添加值后尝试记录deck数组时,我在deck数组中有字符串的值中得到“NaN”。
我知道NaN意味着'不是数字',这就是为什么我在数组中打印字符串值时出现此错误。
如何打印字符串值?
码:
let suits = ["Spades", "Hearts", "Diamonds", "Clubs"];
let cards = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
let deck = [];
for (let i = 0; i < suits.length; i++) {
for (let j = 0; j < cards.length; j++) {
deck.push(+cards[j] + "of" + suits[i]);
}
}
console.log(deck[1]);
for (let k = 0; k < deck.length; k++) {
console.log(deck[k]);
}
deck.push(+cards[j] + "of" + suits[i]);
至
deck.push(cards[j] + "of" + suits[i]);
这个unary operator +variable
将尝试将值转换为数字,类似于parseInt()
或Number()
。你不能将字符串"Ace"
强制转换为数字,而是返回"NaN"
并将其连接到字符串的开头。
实际上你不需要这个一元运算符,因为通过将一个数字与一个字符串连接(+ "of" +
),你已经将你的整数强制转换为字符串,这是你在这种情况下试图实现的数据类型。
JS中的强制:JavaScript type coercion explained
并且用ES6更简洁地写出..
var deck = [].concat(
...suits.map(suit =>
cards.map(card => card +' of '+ suit)
)
)