簡體   English   中英

如何使用字符串數組過濾數組

[英]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#someArray#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM