javascript - 数组返回 JS 中字符串值的 NaN
问题描述
我正在编写一个程序来使用套装和卡片值制作一副卡片。我正在为西装循环内的卡片运行一个 for 循环和另一个嵌套的 for 循环,并尝试在一个名为“deck”的空数组中打印所有组合(52)。在添加值后尝试记录甲板数组时,我在甲板数组中有字符串的值中得到“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]);
这个一元运算符 +variable
将尝试将值转换为一个数字,类似于parseInt()
or Number()
。您不能将字符串"Ace"
转换为数字,因此它会返回"NaN"
并将其连接到字符串的开头。
您实际上不需要这个一元运算符,因为通过将数字与 String ( + "of" +
) 连接,您已经将整数强制转换为 Strings,这是您在这种情况下尝试实现的数据类型。
JS 中的强制转换: JavaScript 类型强制解释
并用ES6更简洁地编写..
var deck = [].concat(
...suits.map(suit =>
cards.map(card => card +' of '+ suit)
)
)
推荐阅读
- javascript - ajax 不工作禁用选择标签中的重复数据和
- python - 发布http请求django restfamework中的问题
- laravel - '429 Too many requests' 在 laravel 中使用 guzzle
- reactjs - 无法使用 displayName 读取用户名
- python - 如何在 python 中使用 FFmpeg 进行桌面流而不缓冲或保存到文件
- machine-learning - 用户警告:一项或多项考试成绩不限:[nan nan nan nan nan nan nan nan nan]
- wordpress - WordPress MultiSite 不加载文件或不允许我登录
- c# - 在两个具有相同值但不在同一个位置的列表中查找差异
- r - 计算不同列数的分组平均值
- python - Python Futures Concurrent 在 Flask 中不起作用