2017-01-25 3 views
0

Ich versuche, unsere Werte aus einem Array je nachdem, was die Benutzer-E-Mail ist, zu filtern.Loop-Array und Filter-E-Mails

Ein Beispiel dafür ist, habe ich ein Array, das wie folgt aussieht:

var myArray = ["[email protected]","[email protected]","[email protected]","[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"]; 

Ich versuche zu drücken nur die Werte, die in den folgenden E-Mail-Adressen enden:

  1. *@hotmail.com
  2. *@gmail.com

ich möchte alle anderen E-Mail-Adressen filtern. Es gibt nur die E-Mail-Adressen zurück, deren Adressen mit den obigen Werten übereinstimmen.

Ich habe mit dem folgenden Code kommen:

var filteredArray = []; 

for (var i = 0, l = myJson.length; i < l; i++) { 
    /// Don't know what to put here! 
    filteredArray.push(); 
} 

Ich möchte die gewünschten Werte in die filteredArray schieben. Alle anderen Werte wie: @ yahhoo.com & @ test.com & @ email.com Ich brauche nicht.

Ich denke, ich bin in der Startposition, aber ich weiß nicht, wie man auf der Grundlage eines Teils einer Zeichenfolge durchläuft und filtert. Vielen Dank.

+1

Um ... Array hat eine [ 'filter'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) Funktion .. –

+0

Mögliches Duplikat von [In Javascript, wie suchen Sie ein Array nach einer Teilzeichenfolge] (http://stackoverflow.com/questions/4556099/in-javascript-how-do-you-search-an-array-for -a-substring-match) –

+0

Vielleicht ein regex: 'if (/ @ (hot | g) mail [.] com $ /. test (myJson [i]))' –

Antwort

4

Sie können Array.prototype.filter() verwenden. Es gibt ein neues Array mit den Werten zurück, die bewirken würden, dass die Callback-Funktion true zurückgibt.

var myArray = ["[email protected]","[email protected]","[email protected]","[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"]; 
 

 
var filtered = myArray.filter(function(email) { 
 
    return email.endsWith('@hotmail.com') || email.endsWith('@gmail.com'); 
 
}); 
 

 
console.log(filtered);

+2

Bemerkenswert, 'string.endsWith()' ist nur mit den modernsten Browsern kompatibel. Sie können 'string.lastIndexOf()' verwenden, um dasselbe mit größerer Kompatibilität zu machen. – Soviut

1
var filteredArray = myArray.filter(function(element) { 
    return element.endsWith('@hotmail.com') || element.endsWith('@gmail.com'); 
}); 
2

Sie können eine ES6 Funktion includes mit der filter Funktion dies zu erreichen, verwenden.

let fitleredEmails = myJson.filter(index => index.includes("@gmail.com") || index.includes("@hotmail.com")); 
+0

Danke! Gibt es eine Möglichkeit, dies umzukehren ... also beinhaltet es nicht ** beinhaltet die Werte; Ich habe es versucht: 'myJson.filter (Index =>! Index.includes (" @ gmail.com ")' Aber das gibt nichts zurück ... haben Sie irgendwelche Ideen durch Zufall? – user3180997