簡體   English   中英

根據包含來自另一個數組的所有值的數組屬性過濾對象數組

[英]Filter an array of objects based on array property containing all values from another array

我有一個對象數組:

const breeds=[{name: 'Golden', temperament: ['friendly', 'kind', 'smart']},{name: 'Husky', temperament: ['alert', 'loyal', 'gentle']},{name: 'Yorkshire Terrier', temperament: ['bold', 'independent', 'kind']}]

我想按選定的“氣質”對它們進行排序。 假設用戶同時選擇了“種類”和“友好”,則應該只返回“金色”。

我正在使用javascript和下划線,這是到目前為止我嘗試過的:

 //selected is an array of selected temperaments
 //breeds is the array of objects
function filterTemperaments(selected, breeds) {
  return _.filter(breeds, function (breed) {
    if (!breed.temperament) breed.temperament = "";
    const breedList = breed.temperament;
    return breedList.includes(...selected);
  }, selected);
}

這似乎只是返回與所選陣列中第一個性格相符的品種。 例如,如果選擇的是['kind', 'loyal'] ,品種是{name:'Golden', temperament: ['kind', 'smelly']} ,盡管與“忠誠”的氣質

有什么更好的解決方案的想法嗎? 提前致謝!!

您可以使用filter僅返回選擇了every氣質的那些品種

 const breeds=[{name: 'Golden', temperament: ['friendly', 'kind', 'smart']},{name: 'Husky', temperament: ['alert', 'loyal', 'gentle']},{name: 'Yorkshire Terrier', temperament: ['bold', 'independent', 'kind']}], selected = ['kind', 'friendly'] const filtered = breeds.filter(b => selected.every(s => b.temperament.includes(s))) console.log(filtered) 

使用filterevery易於使用,以便知道是否有任何匹配項並返回匹配的值。

 const breeds = [{ name: 'Golden', temperament: ['friendly', 'kind', 'smart'] }, { name: 'Husky', temperament: ['alert', 'loyal', 'gentle'] }, { name: 'Yorkshire Terrier', temperament: ['bold', 'independent', 'kind'] }] //selected is an array of selected temperaments //breeds is the array of objects function filterTemperaments(selected, breeds) { return breeds.filter(({ temperament }) => { //here I'm desctructuring the object only to get the temperaments. return selected.every(selection => temperament.indexOf(selection) !== -1) }) } const result = filterTemperaments(['kind', 'friendly'], breeds); console.log(result) 

暫無
暫無

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

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