You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ES6 TypeScript从全局数组中提取指定ID儿童的玩具数组

解决方案:根据儿童ID提取对应玩具数组

你的问题出在find方法的返回值上——它返回的是匹配到的整个儿童对象,而不是对象里的toys数组,所以直接赋值给this.toys肯定拿不到想要的结果。下面用ES6+TypeScript给你两种靠谱的实现方式,还兼顾了类型安全和边界情况处理:

首先,先给你的数据结构定义清晰的TypeScript接口,这能帮你避免很多类型错误:

// 定义玩具的类型
interface Toy {
  id: number;
  label: string;
}

// 定义儿童的类型
interface Kid {
  id: number;
  name: string;
  age: number;
  toys: Toy[];
}

方式一:分步处理(可读性强)

先找到目标儿童,再提取玩具数组,同时处理找不到儿童的情况:

// 假设this.kids是Kid类型的数组,KidId是你要匹配的数字ID
const targetKid = this.kids.find(kid => kid.id === KidId);
// 如果找到儿童就取toys,没找到就返回空数组(避免后续报错)
this.toys = targetKid ? targetKid.toys : [];

方式二:简洁写法(ES6+语法糖)

用可选链操作符?.和空值合并操作符??,一行搞定:

this.toys = this.kids.find(kid => kid.id === KidId)?.toys ?? [];
  • ?.:如果find返回undefined(没找到对应ID的儿童),会直接短路,不会尝试访问undefined.toys而报错;
  • ??:确保如果toys字段意外为空(比如数据不规范),最终返回一个空数组,保持类型一致。

额外提醒

要注意KidId的类型必须和kid.id一致(比如都是number类型),否则TypeScript会提示类型不匹配的错误,这也是提前定义接口的好处之一。

内容的提问来源于stack exchange,提问作者adicto.verde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:18:12