JavaScript数组过滤问题:筛选ID存在于指定数组中的元素
数组过滤解决方案:筛选包含指定ID的元素
嘿,我来帮你搞定这个数组过滤的需求~根据你提供的data结构,我分两种常见场景给你写好代码:
场景1:筛选父对象(保留整个data元素)
如果你需要保留data数组里那些至少有一个transaksi子项的_id在指定ID数组中的父元素,可以这么写:
首先定义你的目标ID数组:
// 把你要匹配的ID都放在这个数组里 const targetIds = ["5acb747c9c2be225d995a8f1", "5acb7a6a305ef72b7d542900"];
然后执行过滤:
const filteredData = data.filter(item => { // 检查当前元素的transaksi列表里是否有符合条件的项 return item.transaksi.some(transaksiItem => targetIds.includes(transaksiItem._id)); });
性能优化小技巧
如果你的目标ID数组很大,建议把数组转成Set,因为Set.has()的查询速度比数组includes()快很多:
const targetIdSet = new Set(targetIds); const filteredData = data.filter(item => { return item.transaksi.some(transaksiItem => targetIdSet.has(transaksiItem._id)); });
场景2:直接提取符合条件的transaksi子元素
如果你只需要把所有匹配指定ID的transaksi子项单独提取出来,可以用flatMap+filter的组合:
const targetIds = ["5acb747c9c2be225d995a8f1", "5acb7a6a305ef72b7d542900"]; const filteredTransaksi = data.flatMap(item => { return item.transaksi.filter(transaksiItem => targetIds.includes(transaksiItem._id)); });
这样得到的filteredTransaksi就是所有符合条件的transaksi对象组成的数组,没有父元素的嵌套。
用你提供的示例data测试的话,场景1的结果会保留第一个{ nama_produk: "Susu" }的父元素,场景2会得到那两个完整的transaksi对象~
内容的提问来源于stack exchange,提问作者Pengguna
相关产品推荐
相关产品推荐

