如何在JavaScript的嵌套对象数组中根据bookingid搜索匹配对象?
解决嵌套数组中按多个bookingid搜索对象的问题
你的问题在于原代码用了find方法,它只会返回第一个满足条件的子数组,而不是遍历所有子数组里的每一个对象,而且也没处理searchValue里的多个ID值。咱们来一步步修正,实现你要的效果:
步骤分析
- 首先得把
searchValue这个字符串转成数字数组,因为你的bookingid是数字类型,这样匹配的时候不会有类型不一致的问题。 - 遍历嵌套数组里的每一个对象,检查它的
bookingid是否在目标ID数组里,符合条件的就加入结果数组。
简洁实现方案(用flat+filter)
这种方法利用数组的内置方法,代码更简洁:
let bookingArr = [ [{ name: "user 1", bookingid: 10, product: "ab" }, { name: "user 1", bookingid: 10, product: "cd" } ], [{ name: "user 2", bookingid: 11, product: "ui" }, { name: "user 1", bookingid: 10, product: "ef" } ], [{ name: "user 3", bookingid: 12, product: "ui" }, { name: "user 4", bookingid: 13, product: "ef" } ] ]; var searchValue = "10,11"; // 把搜索字符串分割并转成数字数组 const targetBookingIds = searchValue.split(',').map(id => parseInt(id, 10)); // 先展开嵌套数组为一维,再筛选出匹配的对象 const FOUND = bookingArr.flat().filter(obj => targetBookingIds.includes(obj.bookingid)); console.log(FOUND);
直观实现方案(双重循环)
如果你觉得内置方法不好理解,用双重循环更直观,适合新手:
let bookingArr = [ [{ name: "user 1", bookingid: 10, product: "ab" }, { name: "user 1", bookingid: 10, product: "cd" } ], [{ name: "user 2", bookingid: 11, product: "ui" }, { name: "user 1", bookingid: 10, product: "ef" } ], [{ name: "user 3", bookingid: 12, product: "ui" }, { name: "user 4", bookingid: 13, product: "ef" } ] ]; var searchValue = "10,11"; const targetBookingIds = searchValue.split(',').map(id => parseInt(id, 10)); const FOUND = []; // 外层循环遍历每个子数组 for (const subArray of bookingArr) { // 内层循环遍历子数组里的每个对象 for (const bookingObj of subArray) { // 检查当前对象的bookingid是否在目标列表中 if (targetBookingIds.includes(bookingObj.bookingid)) { FOUND.push(bookingObj); } } } console.log(FOUND);
两种方法运行后都会输出你预期的结果:
[ { name:"user 1", bookingid:10, product: "ab" }, { name:"user 1", bookingid:10, product: "cd" }, { name:"user 2", bookingid:11, product: "ui" }, { name:"user 1", bookingid:10, product: "ef" } ]
内容的提问来源于stack exchange,提问作者its me
相关产品推荐
相关产品推荐

