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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:23:24