2016-04-01 17 views
0

ile benGelişmiş Array.prototype.filter Javascript

var strategies = [{ 
    "strategy": { 
     "category": "war" 
    } 
}, { 
    "strategy": { 
     "category": "farming" 
    } 
}] 

Sonra geri istiyorum hangi sonuçları gösteren bir dizi var ... Bir JavaScript nesne şöyle var. Aşağıdakilerden herhangi biri olabilir: [] VEYA ["war"]["farming"] VEYA ["war", "farming"].

[] varsa, sonuç almak istemiyorum. Ancak ["war", "farming"] Yukarıdaki iki sonucu da geri almak istiyorum.

Bunu, Array.prototype.filter ile nasıl yapabilirim? this post'u gördüm, ancak bunun üzerinden bir sebep olmadı.

strategies.filter((strategy) => 
    ???? 
) 

Yardımlarınız için teşekkürler. böylece ilk satırı kendi iç stratejisi ayarlayarak edildi

var categories = ['war', 'farming']; 

var filtered = strategies.filter((obj) => { 
    return categories.indexOf(obj.strategy.category) > -1; 
}); 
+1

yüzden, strateji nesnedir. İşlev içinde eşleşiyorsa true, yoksa yanlış ise false değerini döndürmeniz gerekir. Bir dizi – Fallenreaper

+0

bir dizi filtreleme gibi geliyor Ve ['indexOf'] kullanabilirsiniz (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) bir dizinin belirli bir değer içerip içermediğini öğrenmek için. –

+0

İyi nokta Gents. Eğer indexOf'da -1'in üzerinde bir değer elde edersem, gerçek – thedanotto

cevap

4

sadece indexOf ile değerini kontrol edebilirsiniz.

var strategies = [{ 
    "strategy": { 
     "category": "war" 
    } 
}, { 
    "strategy": { 
     "category": "farming" 
    } 
}] 
var b = ["war", "farming"]; 
strategies.filter(function(strategy){ 
    strategy = strategy.strategy; 
    for(var i in b){ 
    if (b[i] == strategy["category"]) { 
     return true; 
     } 
    } 
    return false; 
}); 
+0

'a dönebilirim. Teşekkürler, bu ihtiyacım olana benziyor. Mümkün olduğunda kabul eder. – thedanotto

+0

@thedanotto tatlı! –

1

Nesneniz, strateji bir sarılmış nesne ve gerektiği gibi sonra süzün:

1

o ihtiyaçlarınızı göre boş olup olmadığını görmek için giriş dizisi Testleri:

function filterObj(arr) { 
    return !arr.length ? arr : 
    strategies.filter((el) => arr.indexOf(el.strategy.category) > -1); 
} 

filterObj(['war', 'farming']) 

DEMO

İlgili konular