javascript - Javascript函数在对象数组中调用?
问题描述
我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。谢谢大家
解决方案
你的问题是你离开了你的object
分支 - 你正在返回number
而不是Card
:
let pickedCard: number = Math.floor(Math.random() * x.length);
// This is really `pickedCardIndex`
相反,检查传入的值是一个数组Array.isArray
,然后在最后一步使用数组索引:
if (Array.isArray(x)) {
let pickedCardIndex = Math.floor(Math.random() * x.length);
return x[pickedCardIndex];
}
推荐阅读
- python - 如何使用 Msys2 pacman 有效地搜索包?
- r - 在 Rstudio 中预订新项目
- python - 父模块''未加载,无法在新闻检索中执行相对导入
- swift - 在 Swift 编译器中,闭包是作为类实现的吗?普通闭包是抛出闭包的子类吗?
- python - NotImplementedError:Django 没有为 AnonymousUser 提供数据库表示
- spring - 在自定义 JsonSerializer 中允许 NULL 映射值
- python - 同一数据集的 one_hot_encode 和 count_vectorizer 之间的准确性有何不同?
- neo4j - 如何在neo4j中连接多个列表
- java - 如何移动窗口管理器
- c - 在 C 中计算标量积和字符串操作