在JS中返回NaN for String值的数组

问题描述 投票:-2回答:1

我正在编写一个程序,通过使用套装和卡片值制作一副纸牌。我正在运行一个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]);
}
javascript arrays nan
1个回答
2
投票
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)
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.