2016-06-03 14 views
5

Ich schreibe ein Skript, um ein Wörterbuch mit dem Namen dict zu erstellen, wo ich die Frequenzen einiger Wörter, die ich in einem Textbereich habe, speichern. Mein Array sieht so aus:Wie filtert man ein Wörterbuch nach Wert in JavaScript?

var dict = removeArray.reduce(function(p,c) { 
    if (p[c] === undefined) { 
     p[c] = 1; 
    } else { 
     p[c]++; 
    } 
    return p; 
}, {}); 

Ich möchte die Elemente dieses Wörterbuchs nach ihrem Wert filtern. Ich muss eine Liste mit den Wörtern erstellen, die einen Wert größer als eins haben. Mein Wörterbuch sieht wie folgt aus:

{ 
    "92173": 6, 
    "C": 6, 
    "GJHGWO.NAYE": 1, 
    "GJHGX4.NAYE": 1, 
    "GJHGX6.NAYE": 1, 
    "GJHGX8.NAYE": 1, 
    "GJHGXA.NAYE": 1, 
    "GJHGXC.NAYE": 1, 
    "RBD": 10, 
    "RBD3": 2, 
    "SAMBORNSiPOSSSTHRa": 2, 
    "SAMBORNSiPOSSSTHRa1": 2, 
    "SAMBORNSiPOSSSTHRa2": 2, 
    "X": 4, 
    "X3": 2 
} 

Um zu erreichen, dass ich versucht, mit lodash wie folgt:

var filtered = _.find(dict, function(user) { 
    return user.frecuency > 1; 
}); 

Aber ich nicht, da ich bekam:

undefined 

I don‘ Ich weiß, wie man lodash benutzt, um dieses Array zu filtern.

Mein vollständige Code sieht wie folgt aus:

var splitWords = document.getElementById("texto").value.split(/[["\|~]/); 
 
var removeArray = _.remove(splitWords, function (word) { 
 
    return word !== '' && word !== ' ' && word !== '\n' 
 
}); 
 

 
var dict = removeArray.reduce(function(p,c) { 
 
    if (p[c] === undefined) { 
 
     p[c] = 1; 
 
    } else { 
 
     p[c]++; 
 
    } 
 
    return p; 
 
}, {}); 
 
console.log(dict); 
 

 
var filtered = _.find(dict, function(user) { 
 
    return user.frecuency > 1; 
 
}); 
 

 
console.log(filtered)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 
 
<p id="demo"></p> 
 
<textarea cols="150" rows="15" id="texto"> 
 
"RBD|X|RBD3|C|92173~GJHGWO.NAYE" 
 
"SAMBORNSiPOSSSTHRa1" 
 
"RBD|X|RBD|C|92173~GJHGX4.NAYE" 
 
"SAMBORNSiPOSSSTHRa" 
 
"RBD|X3|RBD3|C|92173~GJHGX6.NAYE" 
 
"SAMBORNSiPOSSSTHRa1" 
 
"RBD|X|RBD|C|92173~GJHGX8.NAYE" 
 
"SAMBORNSiPOSSSTHRa2" 
 
"RBD|X|RBD|C|92173~GJHGXA.NAYE" 
 
"SAMBORNSiPOSSSTHRa2" 
 
"RBD|X3|RBD|C|92173~GJHGXC.NAYE" 
 
"SAMBORNSiPOSSSTHRa" 
 
</textarea>

+0

Underscore.js -> es zu versuchen, kann Ihr Leben einfacher –

Antwort

8

Sie reduce wieder verwenden könnte, dass im Klar JavaScript zu erreichen:

var filtered = Object.keys(dict).reduce(function (filtered, key) { 
    if (dict[key] > 1) filtered[key] = dict[key]; 
    return filtered; 
}, {}); 

Es gibt ein paar Probleme waren mit Ihrem Versuch mit lodash:

  • _.find ist nicht für die Rückgabe eines Objekts vorgesehen, das eine Auswahl von Schlüssel/Werten eines bestimmten Objekts annimmt. Sie würden _.pickBy dafür benötigen.
  • Ihre Objektwerte haben keine frecuency Eigenschaft; sie sind primitive Werte, so sollten Sie nur user > 1 zurückkehren müssen

Lodash Code:

var filtered = _.pickBy(dict, function(user) { 
    return user > 1; 
}); 
+0

Dank das war wirklich hilfreich machen, Ich schätze die Unterstützung sehr. – neo33