在对象数组内部调用的Javascript函数?

马科斯·莫拉(Marcos Moura)

我在Google上搜索了很多,但没有找到满意的答案。在打字稿中搜索打字错误面临以下代码:

// @strict: false
let suits = ["hearts", "spades", "clubs", "diamonds"];

function pickCard(x: any): any {
  // Check to see if we're working with an object/array
  // if so, they gave us the deck and we'll pick the card
  if (typeof x == "object") {
    let pickedCard = Math.floor(Math.random() * x.length);
    return pickedCard;
  }
  // Otherwise just let them pick the card
  else if (typeof x == "number") {
    let pickedSuit = Math.floor(x / 13);
    return { suit: suits[pickedSuit], card: x % 13 };
  }
}

let myDeck = [
  { suit: "diamonds", card: 2 },
  { suit: "spades", card: 10 },
  { suit: "hearts", card: 4 },
];

let pickedCard1 = myDeck[pickCard(myDeck)];  //<--- HERE IS DOUBT
alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);

let pickedCard2 = pickCard(15);
alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);

我想知道那是什么表情?我是否在将对象数组传递为参数的对象数组内调用函数?是啊 为什么不能像这样直接调用函数:

let pickedCard1 = pickCard(myDeck);

我总是把我定义为退货。抱歉,jr问题,但我想更好地理解javascript。谢谢大家

肖恩·维埃拉(Sean Vieira)

您的问题是您离开了object分支机构-您返回number而不是Card

let pickedCard: number = Math.floor(Math.random() * x.length);
// This is really `pickedCardIndex`

相反,请使用来检查传入的值是否为Array Array.isArray,然后在数组的最后一步进行索引:

  if (Array.isArray(x)) {
    let pickedCardIndex = Math.floor(Math.random() * x.length);
    return x[pickedCardIndex];
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章