[英]How can I filter an array with an array of strings
我遇到了一個問題,我在 JS 中有一個類似的字符串數組:
const users = [
{
age: 13,
username: "adam",
interests: []
},
{
age: 20,
username: "eve"
interests: [
{
name: "Bars",
},
{
name: "Cafe",
},
],
},
{
age: 23,
username: "alex"
interests: [
{
name: "Bars",
},
{
name: "Healthy",
},
{
name: "Japanese",
},
],
},
];
const interests = ["Bars", "Cafe"];
我想具有相同利益的陣列過濾器的用戶interests
。
我嘗試了不同的方法,但沒有得到想要的結果。 我應該如何處理這個問題?
根據用戶至少有一個匹配的興趣或所有想要的興趣的想要的結果,您可以使用Array#some
或Array#every
來過濾興趣。
const users = [{ age: 13, username: "adam", interests: [] }, { age: 20, username: "eve", interests: [{ name: "Bars" }, { name: "Cafe" }] }, { age: 23, username: "alex", interests: [{ name: "Bars" }, { name: "Healthy" }, { name: "Japanese" }] }], interests = ["Bars", "Cafe"], one = users.filter(o => interests.some(i => o.interests.some(({ name }) => name === i))), all = users.filter(o => interests.every(i => o.interests.some(({ name }) => name === i))); console.log(one); console.log(all);
.as-console-wrapper { max-height: 100% !important; top: 0; }
const users = [ { age: 13, username: "adam", interests: [] }, { age: 20, username: "eve", interests: [ { name: "Bars", }, { name: "Cafe", }, ], }, { age: 23, username: "alex", interests: [ { name: "Bars", }, { name: "Healthy", }, { name: "Japanese", }, ], }, ]; const interests = ["Bars", "Cafe"]; function getUsers(users, interests) { return users.map(user => { for(let i=0; i<interests.length; i++) { return user.interests.some(interest => interest.name == interests[i]) ? user : false } }) } console.log(getUsers(users, interests))
const users = [ { age: 13, username: "adam", interests: [] }, { age: 20, username: "eve", interests: [ { name: "Bars", }, { name: "Cafe", }, ], }, { age: 23, username: "alex", interests: [ { name: "Bars", }, { name: "Healthy", }, { name: "Japanese", }, ], }, ]; const interests = ["Bars", "Cafe"]; const filteredData = users.filter(user => { const userInterests = user.interests.map(interest => interest.name); return JSON.stringify(userInterests) === JSON.stringify(interests) } ); console.log('data ->', filteredData);
使用下面的代碼
users.filter(e=>e.interests.find(q=>interests.some(w=>w==q.name)))
此代碼段將返回具有相同興趣的人的結構。 鍵是interestName,值是一組人。
const users = [ { age: 13, username: "adam", interests: [], }, { age: 20, username: "eve", interests: [ { name: "Bars", }, { name: "Cafe", }, ], }, { age: 23, username: "alex", interests: [ { name: "Bars", }, { name: "Healthy", }, { name: "Japanese", }, ], }, ]; let commonInterests = new Map(); users.forEach((user) => { for (let interest in user.interests) { const username = user.username; const interestName = user.interests[interest].name; if (commonInterests.has(interestName)) { let knownNames = commonInterests.get(interestName); knownNames.push(username); commonInterests.set(interestName, knownNames); } else { commonInterests.set(interestName, [username]); } } }); console.log(Object.fromEntries([...commonInterests]));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.