[英]How can i search inside array of array object in javascript?
I have a booking array of arrays that contain objects and I have to search inside the array using searchValue
could you please help me here我有一个包含对象的 arrays 预订数组,我必须使用
searchValue
在数组中搜索,你能帮我吗?
here we have to check the booking id if booking id and searchValue
matched we have to push that object into result array.在这里,如果预订 id 和
searchValue
匹配,我们必须检查预订 id,我们必须将 object 推入结果数组。
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"; var FOUND = bookingArr.find(function(post, index) { if (post.bookingid == 11) return true; }); console.log(FOUND)
expected result预期结果
[ { name:"user 1", bookingid:10, product: "ab" },
{ name:"user 1", bookingid:10, product: "cd" },
{ name:"user 1", bookingid:10, product: "ef" },
{ name:"user 2", bookingid:11, product: "ui" }]
You can try this code:你可以试试这段代码:
const 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' }, ]]; const searchValue = '10,11'; const sv = searchValue.split(',').map(Number); const FOUND = bookingArr.flat().filter(({ bookingid }) => sv.includes(bookingid)); console.log(FOUND);
You can try this:你可以试试这个:
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'; var searchIds = searchValue.split(','); var FOUND = []; bookingArr.forEach((el) => { el.forEach((el2) => { searchIds.forEach((num) => { if (num == el2.bookingid) { FOUND.push(el2); } }); }); }); console.log(FOUND);
Following with filter
and Set
will work:-跟随
filter
和Set
将起作用: -
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"; function logic(arr, searchValue) { let searchInputs = searchValue.split(','); let searchSet = new Set(searchInputs.map(val => parseInt(val))); let output = bookingArr.flat().filter(curr => searchSet.has(curr.bookingid)) return output; } console.log(logic(bookingArr, searchValue));
You can use Array#filter
with a Set
for better performance after flattening the array.展平数组后,您可以使用
Array#filter
和Set
以获得更好的性能。
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" } ]]; let searchValue = "10,11"; let set = new Set(searchValue.split(",").map(Number)); // for faster lookup let res = bookingArr.flat().filter(x => set.has(x.bookingid)); console.log(res);
You can simply flatten the array and filter out the desired results.您可以简单地展平阵列并过滤掉所需的结果。 Also, I've create a
Set
out of the search value for making the code more performant.此外,我还根据搜索值创建了一个
Set
以提高代码的性能。
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' }, ], ]; const searchValue = "10,11" const searchSet = new Set(searchValue.split(",")) const res = bookingArr.flat().filter(b => searchSet.has(String(b.bookingid))) console.log(res)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.