簡體   English   中英

在對象數組中過濾數組

[英]filter array in array of objects

我有這個數組:

[
  {
    "title": "fruit",
    "categories": [
      "apple",
      "banana"
    ]
  },
  {
    "title": "city",
    "categories": [
      "Brazil",
      "EUA",
      "China"
    ]
  },
  {
    "title": "name",
    "categories": [
      "Ana"
    ]
  }
]

我想通過用戶輸入的任何術語來過濾它

我已經得到了這個,僅適用於標題,但我想按標題和類別搜索:

array.filter(f => f.title.includes(myString))

||交替使用f.categories進行.some檢查:

array.filter(f =>
  f.title.includes(myString) ||
  f.categories.some(
    category => category.includes(myString)
  )
);

現場演示:

 const array = [ { "title": "fruit", "categories": [ "apple", "banana" ] }, { "title": "city", "categories": [ "Brazil", "EUA", "China" ] }, { "title": "name", "categories": [ "Ana" ] } ]; const input = document.querySelector('input'); input.addEventListener('input', () => { document.querySelector('div').textContent = JSON.stringify( array.filter(f => f.title.includes(input.value) || f.categories.some( category => category.includes(input.value) ) ) ); });
 <input> <div></div>

這不是您的原始代碼正在實現的邏輯,但如果您還需要檢查不同的大小寫匹配:

 const array = [ { "title": "fruit", "categories": [ "apple", "banana" ] }, { "title": "city", "categories": [ "Brazil", "EUA", "China" ] }, { "title": "name", "categories": [ "Ana" ] } ]; const input = document.querySelector('input'); input.addEventListener('input', () => { const value = input.value.toLowerCase(); document.querySelector('div').textContent = JSON.stringify( array.filter(f => f.title.toLowerCase().includes(value) || f.categories.some( category => category.toLowerCase().includes(value) ) ) ); });
 <input> <div></div>

如果您只想要與您的標題和類別匹配的項目,則可以執行此操作以獲取匹配數組。

array.filter(f => f.title === 'myTitle' && f.categories.includes('myCategory'));

如果您只想按標題或類別過濾,我認為這就足夠了

 const array = [ { "title": "fruit", "categories": [ "apple", "banana" ] }, { "title": "city", "categories": [ "Brazil", "EUA", "China" ] }, { "title": "name", "categories": [ "Ana" ] } ] const string = 'Brazil'// whatever the user types const result = array.filter(f => f.title === string || f.categories.includes(string)) console.log(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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