[英]array in array filter - javascript
你好,我需要數組方面的幫助,你可以看到我的數據
{
"age" : "18",
"altKategoriler" : [ "Dramalar" ],
"category" : [ "Aksiyon", "Heyecanlı", "Gerilim" ],
"id" : 5240718100,
"img" : "https://i.ibb.co/k8wx5C8/AAAABW9-ZJQOg-MRljz-Zwe30-JZw-Hf4vq-ERHq6-HMva5-ODHln-Ci-OEV6ir-Rcjt88tcnm-QGQCKpr-K9h-Oll-Ln-Sbb-EI.jpg",
"izlenilmeSayisi" : 0,
"logo" : "https://i.ibb.co/Rb2SrcB/AAAABfcrhh-Rni-Ok-Ct2l-Rys-ZYk-Oi-T0-XTeagkrw-Mkm-U0h-Lr-WIQZHEHg-VXihf-OWCwz-Vv-Qd7u-Ffn-DFZEX2-Ob.webp",
"oyuncuKadrosu" : [ "Diego Luna", "Michael Pena", "Scoot McNairy", "Tenoch Huerta", "Joaquin Cosio" ],
"senarist" : [ "Doug Miro" ],
"time" : "3 Sezon",
"title" : "Narcos: Mexico",
"type" : "Dizi",
"videoDescription" : "Guadalajara Karteli'nin yükselişinin gerçek öyküsünü anlatan bu yeni ve cesur Narcos hikâyesinde, Meksika'daki uyuşturucu savaşının 1980'lerdeki doğuşuna tanıklık edin.",
"videoQuality" : "HD",
"videosrc" : "https://tr.vid.web.acsta.net/uk/medias/nmedia/90/18/10/18/19/19550785_hd_013.mp4",
"year" : "2021",
"yonetmen" : [ "Carlo Bernard", "Chris Brancato" ]
}
我可以訪問 id、title 或 logo 等元素,因為它們不是 arrays。
由於 yield 中的類別中有一個數組,我如何循環遍歷數組中的數據?
var data = this.database.filter((item) => item.type == searchType)
var data = this.database.filter((item) => item.category == searchCategory)
沒關系,因為我的類型值沒有數組。
但是當我輸入我的類別值時,它只會獲得第一個索引 [0]。 它不查看其他索引。
綜上,item.category[0], item.category[1], item.category[2]......
我怎樣才能得到像這樣的索引瀏覽
如果您的數據如下所示:
let data ={
"age" : "18",
"altKategoriler" : [ "Dramalar" ],
"category" : [ "Aksiyon", "Heyecanlı", "Gerilim" ],
"id" : 5240718100,
"img" : "https://i.ibb.co/k8wx5C8/AAAABW9-ZJQOg-MRljz-Zwe30-JZw-Hf4vq-ERHq6-HMva5-ODHln-Ci-OEV6ir-Rcjt88tcnm-QGQCKpr-K9h-Oll-Ln-Sbb-EI.jpg",
"izlenilmeSayisi" : 0,
"logo" : "https://i.ibb.co/Rb2SrcB/AAAABfcrhh-Rni-Ok-Ct2l-Rys-ZYk-Oi-T0-XTeagkrw-Mkm-U0h-Lr-WIQZHEHg-VXihf-OWCwz-Vv-Qd7u-Ffn-DFZEX2-Ob.webp",
"oyuncuKadrosu" : [ "Diego Luna", "Michael Pena", "Scoot McNairy", "Tenoch Huerta", "Joaquin Cosio" ],
"senarist" : [ "Doug Miro" ],
"time" : "3 Sezon",
"title" : "Narcos: Mexico",
"type" : "Dizi",
"videoDescription" : "Guadalajara Karteli'nin yükselişinin gerçek öyküsünü anlatan bu yeni ve cesur Narcos hikâyesinde, Meksika'daki uyuşturucu savaşının 1980'lerdeki doğuşuna tanıklık edin.",
"videoQuality" : "HD",
"videosrc" : "https://tr.vid.web.acsta.net/uk/medias/nmedia/90/18/10/18/19/19550785_hd_013.mp4",
"year" : "2021",
"yonetmen" : [ "Carlo Bernard", "Chris Brancato" ]
}
如果我們有數據數組,你可以這樣做:
myArray.filter(item=>item.category.indexOf(searchCategory)>=0)
但是如果你想在 object 而不是數組中探索,你可以這樣做:
data.category.indexOf(searchCategory)>=0
您可以通過使用Array.isArray
測試目標字段是否為數組,然后對每個元素調用過濾器,查看是否有任何元素為正(使用.some()
),從而使其變得有點通用。 過濾器可以是提供的 function,以便它可以執行簡單的匹配,或應用正則表達式,或其他任何東西。
您可以跳過該步驟並檢查該值是否具有.some()
方法,而不是使用Array.isArray
進行測試。 如果是這樣,調用它將給出所需的結果,否則(使用.?
和??
運算符),過濾器應該應用於整個值:
這是它的樣子:
function applyFilter(data, field, filter) { return data.filter(item => item[field]?.some(filter)?? filter(item)); } // Example use: var data = [{ "category": [ "Action", "Thriller", "Horror"], "type": "Series", }, { "category": [ "Historical", "Romance" ], "type": "Theatre", }]; // Find entries that have a category that looks like "roman*": var result = applyFilter(data, "category", value => /^roman.*/i.test(value)); console.log(result);
如果您運行的是舊版本的 JavaScript,並且不支持.?
還是??
,然后使用:
return data.filter(item => Array.isArray(item[field])
? item[field].some(filter)
: filter(item));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.