首页 > 解决方案 > 数组返回 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]);
}

标签: javascriptarraysnan

解决方案


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)
    )
)

推荐阅读