TypeScript中如何获取Palantir ObjectSet过滤后的首个/随机单个对象
实现方案
你当前返回类型定义为ObjectSet<CombinedSentencesForTagging>本身就是集合类型,所以必然返回多条数据,要返回单条首先需要把返回类型调整为CombinedSentencesForTagging | undefined,兼容过滤结果为空的场景。
方案1:返回过滤结果的第一条数据
@Function() public nextUnprocessedValueString(inputObject: ObjectSet<CombinedSentencesForTagging>): CombinedSentencesForTagging | undefined { // 执行过滤逻辑,如果你需要基于入参inputObject过滤,可直接替换为inputObject.filter(xxx) const filteredSet = Objects.search().combinedSentencesForTagging() .filter(f => f.customerFeedback.exactMatch('i like it very much.')) // 仅取第一页的1条数据,返回首个元素 const firstItem = filteredSet.page({ pageSize: 1 }).data[0] return firstItem }
方案2:返回过滤结果中的随机一条数据
@Function() public nextUnprocessedValueString(inputObject: ObjectSet<CombinedSentencesForTagging>): CombinedSentencesForTagging | undefined { const filteredSet = Objects.search().combinedSentencesForTagging() .filter(f => f.customerFeedback.exactMatch('i like it very much.')) // 先获取符合条件的总条数 const totalCount = filteredSet.count() if (totalCount === 0) { return undefined } // 生成随机偏移量 const randomOffset = Math.floor(Math.random() * totalCount) // 从偏移量位置取1条数据 const randomItem = filteredSet.page({ pageSize: 1, pageOffset: randomOffset }).data[0] return randomItem }
注意事项
- 如果你需要基于传入的
inputObject集合做过滤,不需要重新调用Objects.search(),直接对inputObject执行filter操作即可,性能更好也更符合入参设计。
内容的提问来源于stack exchange,提问作者Sensenmann69
相关产品推荐
相关产品推荐

