dane Forma jest zawsze tekst. Moja sugestia jest, aby przeanalizować go jako liczbę całkowitą i porównać go z oryginałem:
var sampleData = ["not a number", "0", "10", "3.14", "-12", "-0.34", "2e10", "34foo", "foo34"];
var integers = [], notIntegers = [];
for(var i=0, len=sampleData.length; i<len; i++){
var original = sampleData[i];
var parsed = parseInt(original, 10);
if(!isNaN(parsed) && original==parsed){
integers.push(parsed);
}else{
notIntegers.push(original);
}
}
alert("Integers: " + integers.join(", ") + "\nNot integers: " + notIntegers.join(", "));
To pokazuje:
Integers: 0, 10, -12
Not integers: not a number, 3.14, -0.34, 2e10, 34foo, foo34
notacja naukowa nie jest obsługiwany, ani tysiąc separatorów. Jeśli to jest problem, potrzebujesz czegoś innego;)
Aktualizacja: Chcę wyjaśnić, że jest to tylko jedno z możliwych podejść, a nie jedyna prawda. Takie podejście ma sens, jeśli musisz matematyki z danymi, tak i tak musisz uzyskać zmienną numeryczną.
Po prostu zauważam, że [* Number.isInteger *] (http: // ecma-interna tional.org/ecma-262/6.0/index.html#sec-isinteger) został dodany w ECMA-262 ed 6 aka ECMAScript 2015. – RobG