简体   繁体   English

如何在 javascript 中的数组 object 的数组中搜索?

[英]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:-跟随filterSet将起作用: -

 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#filterSet以获得更好的性能。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM