TypeScript中Kotlin Array.any()的等价方法及Next.js分组列表过滤实现问题
TypeScript中Kotlin Array.any()的等价方法及Next.js分组列表过滤实现问题
嘿,刚接触TypeScript的话确实容易遇到这种“找对应语法”的小困惑,不过别担心,你要找的和Kotlin Array.any()完全等价的方法,TypeScript(其实是JavaScript原生就支持)里现成有,就是**Array.prototype.some()**!
它的用法和Kotlin的any()几乎一模一样:传入一个判断条件的回调函数,只要数组里有至少一个元素满足这个条件,就返回true,否则返回false,而且为了性能,它找到第一个符合条件的元素就会停止遍历,不会浪费资源。
结合你Next.js里的分组列表场景,我给你举个具体的实现例子,一看就懂:
假设你的数据结构大概是这样的(可以根据你实际的Item和Group结构调整):
// 定义你的项类型 interface Item { id: number; name: string; // 用这个字段代表是否符合你的筛选条件,实际换成你自己的判断逻辑就行 isEligible: boolean; } // 定义分组类型 interface Group { title: string; items: Item[]; } // 示例分组数据 const rawGroups: Group[] = [ { title: "待办任务", items: [ { id: 1, name: "写组件文档", isEligible: true }, { id: 2, name: "修复样式bug", isEligible: false }, ], }, { title: "已完成任务", items: [ { id: 3, name: "搭建项目框架", isEligible: false }, { id: 4, name: "配置CI/CD", isEligible: false }, ], }, ];
接下来要过滤掉那些没有任何符合条件项的分组,就可以用filter结合some()来实现:
// 筛选出至少有一个符合条件项的分组 const filteredGroups = rawGroups.filter((group) => { // 这里的回调就是你的判断逻辑,比如判断item的状态、属性等等 return group.items.some((item) => item.isEligible); });
最后在Next.js组件里渲染的时候,只用渲染过滤后的分组就行:
export default function GroupedItemList() { const filteredGroups = rawGroups.filter((group) => group.items.some((item) => item.isEligible) ); return ( <div className="grouped-list"> {filteredGroups.map((group) => ( <section key={group.title} className="group"> <h3>{group.title}</h3> <ul> {/* 这里还可以进一步只渲染分组里符合条件的项,按需调整 */} {group.items .filter((item) => item.isEligible) .map((item) => ( <li key={item.id}>{item.name}</li> ))} </ul> </section> ))} </div> ); }
简单总结下:
Array.some()就是你要找的KotlinArray.any()的等价方法- 搭配
Array.filter()就能轻松过滤掉没有符合条件项的分组,实现你想要的效果
备注:内容来源于stack exchange,提问作者My Waiwai
相关产品推荐
相关产品推荐

