2017-06-19 3 views
-2

ich ein Array haben wie unten und müssen die Zahlen von ihr ab, um herauszufiltern: [1,2]Filtering Zahlen aus einem Array

var str = [ 
    "https://xx.jpg", 
    "https://xx.jpg", 
    "1", 
    "https://guide.jpg", 
    "2", 
    "/static.jpg" 
] 

Ich habe den folgenden Code:

var filtered = str.filter(function(item) { 
    return (typeof item === "number") 
}); 

aber es ist nicht filtern, da es eine Zeichenfolge ist.

Wie geht das?

+1

Sie haben Zeichenfolgen, keine Zahlen im Array. –

+5

'Ziffer'? bist du ernst? Was ist "res"? –

+2

Haben Sie im Internet sogar überprüft, ob eine Zeichenkette eine Nummer ist? – Weedoze

Antwort

2

Eine kleine Änderung an Ihrem Code, damit es funktioniert, könnte dies möglicherweise funktionieren.

var str = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2", "/static.jpg"]; 
 
var filtered = str.filter(function (item) { 
 
    return !(parseInt(item) == item); 
 
}); 
 
console.log(filtered);

Oder wenn Sie die Zahlen:

var str = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2", "/static.jpg"]; 
 
var filtered = str.filter(function (item) { 
 
    return (parseInt(item) == item); 
 
}); 
 
console.log(filtered);

+0

Die Frage fordert uns auf, Zahlen herauszufiltern, daher sollte auch 1,5 herausgefiltert werden. –

+0

@LajosArpad Versuchen Sie 1,5 und sehen? ':)' Es wird herausgefiltert ... –

+0

@LajosArpad http://jsbin.com/fuwihalote/edit?js,console –

1

Sie einen regulären Ausdruck, die eine Zeichenfolge testen könnte, wenn es nur Ziffern enthält.

var array = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2", "/static.jpg"]; 
 

 
array = array.filter(function (a) { 
 
    return !/^\d+$/.test(a); 
 
}); 
 

 
console.log(array);

0

func Helfer Sie den Einsatz in Filter

function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n);} 
0

Verwendung isNaN().

var str=["https://xx.jpg","https://xx.jpg","1","https://guide.jpg","2","/static.jpg"]; 
 

 
var filtered = str.filter(function(item) { 
 
     
 
    return (!isNaN(item)); 
 
    }); 
 
     
 
console.log(filtered);

+0

"1" und "2" sollten anstelle der anderen Elemente herausgefiltert werden, Sie benötigen isNaN statt! IsNaN. Ihre Antwort bezieht sich auch nicht auf den Fall "" oder null. –

1

Wenn Sie nur überprüfen wollen, ob eine Zeichenfolge Ziffern enthält, können Sie regular expressions verwenden.

var str = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2", "/static.jpg"]; 
 
var filtered = str.filter(function (item) { 
 
    return item.match(/^-?\d+$/); 
 
}); 
 
console.log(filtered);

+0

weiß nicht, warum downvote ?? –

0
str = str.filter(function(item) { 
    return (item !== 0) && ((!item) || (isNaN(item))); 
}); 

Die rechte Seite der Operation ruft filter und übergibt einen function die true zurückgibt, wenn ein Artikel nicht gleich 0 ist, und es ist entweder Falsey oder keine Zahl; Andernfalls gibt es false zurück. Zum Beispiel "" oder null sollte im Array gehalten werden, soweit die Spezifikation geht. Mit diesem Ansatz erhalten wir das gewünschte Array und weisen es der Variablen str zu.

Verwandte Themen