如何将随机获取的market ID以值列表而非对象形式返回?
解决方案
因为你的markets是二维数组,所以需要先把嵌套的数组扁平化,再提取每个对象里的id字符串,这里给你几种实用的实现方式:
方法一:使用flat() + map()(最简洁)
这种方法先把二维数组转成一维,再批量提取id:
const randomIndex = Math.floor(Math.random() * data.length); const selectedEvent = data[randomIndex]; const eventId = selectedEvent.eventId; // 扁平化二维数组后,提取每个对象的id const marketIds = selectedEvent.markets.flat().map(item => item.id);
如果你的markets可能有更深的嵌套(比如三维数组),可以用flat(Infinity)来彻底扁平化。
方法二:使用嵌套forEach()(直观易懂)
适合喜欢步骤清晰写法的场景:
const randomIndex = Math.floor(Math.random() * data.length); const selectedEvent = data[randomIndex]; const eventId = selectedEvent.eventId; const marketIds = []; // 遍历外层数组 selectedEvent.markets.forEach(marketGroup => { // 遍历内层每个对象,提取id并存入数组 marketGroup.forEach(item => { marketIds.push(item.id); }); });
方法三:使用reduce()(灵活可控)
如果需要在提取过程中做额外处理,这种方式更灵活:
const randomIndex = Math.floor(Math.random() * data.length); const selectedEvent = data[randomIndex]; const eventId = selectedEvent.eventId; const marketIds = selectedEvent.markets.reduce((resultArray, currentGroup) => { // 把当前组的id数组合并到结果数组里 return resultArray.concat(currentGroup.map(item => item.id)); }, []); // 初始值为空数组
额外提示
如果担心部分对象没有id属性导致返回undefined,可以用可选链操作符做容错处理:
// 替换原map里的item.id为item?.id,再过滤掉无效值 const marketIds = selectedEvent.markets.flat().map(item => item?.id).filter(Boolean);
内容的提问来源于stack exchange,提问作者BruceyBandit
相关产品推荐
相关产品推荐

