簡體   English   中英

數組過濾器中的數組 - javascript

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

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