簡體   English   中英

如何在 javascript 中的數組 object 的數組中搜索?

[英]How can i search inside array of array object in javascript?

我有一個包含對象的 arrays 預訂數組,我必須使用searchValue在數組中搜索,你能幫我嗎?

在這里,如果預訂 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)

預期結果

[ { 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" }]

你可以試試這段代碼:

 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);

你可以試試這個:

 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);

跟隨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));

展平數組后,您可以使用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);

您可以簡單地展平陣列並過濾掉所需的結果。 此外,我還根據搜索值創建了一個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