2017-02-28 1 views
0

Ich muss Array mit Vergleichszeichenfolge und numerische Ergebniswerte filtern. Aber Filter Array-Werte erhalten, während ich beide Werte eingeben. Sonst kann ich keine Werte bekommen. Das bedeutet, wenn Sie nur einen String-Wert eingeben, kann ich keine Filter-Array-Werte erhalten.Filter aus Array mit mehreren Wert js

var fullArray = [{stringValue:"apple", numericValue:"40"}, {stringValue:"banana", numericValue:"20"}, {stringValue:"berry", numericValue:"30"}, {stringValue:"mango", numericValue:"10"}] 

    _.filter(fullArray, function(el){ 
     if(el.stringValue.toLowerCase().indexOf(stringResultValue.toLowerCase())>=0 && el.numericValue==numericResultValue){ 
      resultFilter.push(el); 
     } 
    }); 
+0

was 'resultFilter',' stringResultValue', 'numericResultValue'? Nehmen Sie ein Beispiel für Eingabedaten und erwartetes Ergebnis. –

+0

Siehe [Array.prototype.filter] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter). Lodashs "Filter" sollte ähnlich funktionieren. – barbsan

+0

@AndrewParamoshkin, ErgebnisFilter wird ein endgültiges Ergebnis Array erhalten. stringResultValue und numericResultValue beide erhalten bereits Wert von Klick-Funktion. –

Antwort

1

filter erwartet eine Funktion, die etwas truthy für Elemente zurückgibt, die in dem neuen Array sein sollte, und etwas Falsey wenn sie nicht sollten. Sie sollten so etwas wie haben:

var fullArray = [{stringValue:"apple", numericValue:"40"}, {stringValue:"banana", numericValue:"20"}, {stringValue:"berry", numericValue:"30"}, {stringValue:"mango", numericValue:"10"}] 

resultFilter = _.filter(fullArray, function(el){ 
    return el.stringValue.toLowerCase().indexOf(stringResultValue.toLowerCase()) >= 0 && 
      el.numericValue === numericResultValue; 
}); 

eine kürzere Version, mit ES6 Syntax:

resultFilter = fullArray.filter(el => 
    el.stringValue.toLowerCase().includes(stringResultValue.toLowerCase()) && 
    el.numericValue === numericResultValue; 
); 
Verwandte Themen