Ich habe ein Array var data = ["test", "10%", "abc", "20%"];Wie Nummer aus Array von Strings herausfiltern
Jetzt gibt es eine Möglichkeit, so dass ich herausfiltern kann und nur die Zahlen etwas wie result=["10%","20%"];
Ich habe ein Array var data = ["test", "10%", "abc", "20%"];Wie Nummer aus Array von Strings herausfiltern
Jetzt gibt es eine Möglichkeit, so dass ich herausfiltern kann und nur die Zahlen etwas wie result=["10%","20%"];
Sie können diese verwenden function
:
Erläuterung: Wir schaffen ein neues Array und drücken alle Elemente des alten Array,
wenn der erste Buchstabe in einer Ziffer umgewandelt werden kann.
var data = ["test", "10%", "abc", "20%"];
function onlyNumbers(array) {
var newArr = [];
array.forEach(function(e) {
if (parseInt(e.charAt(0))) {
newArr.push(e);
}
})
return newArr;
}
var dataNew = onlyNumbers(data); // <-- ["10%","20%"]
document.write(JSON.stringify(dataNew));
Danke für die Lösung, Sie haben die Frage richtig und haben mir, was ich brauchte – user1076698
Dies wird Elemente wie "1xyz%", "2 /() abs" und so weiter ... Sie überprüfen nur, dass das erste Zeichen ist eine Zahl. – henrikmerlander
@henrikmerlander Das ist richtig. Es ist nur eine Lösung für diese Art von Szenario.Wenn die Frage oder die Situation spezifischer wäre, müssten wir den Code ändern. – John
var data = ["test", "10%", "abc", "20%"];
var result = [];
data.forEach(function(v) {
if (parseInt(v) > 0) result.push(parseInt(v));
});
console.log(result);
bekommen Wenn Sie nicht die Zahlen müssen aber die String-Werte, dann ersetzen Sie einfach : result.push (parseInt (v)); => result.push (v);
können Sie ein underscore library verwenden und zu tun:
var data=["test","10%","abc","20%"];
var result = _.filter(data, function(item) {
return item.match(/^(\d+|\d+[.]\d+)%?$/);
});
document.write(JSON.stringify(result));
<script src="http://underscorejs.org/underscore-min.js"></script>
Und Sie können ohne externe Bibliothek das gleiche tun:
var data=["test","10%","abc","20%"],
result = [];
for(var i = 0; i < data.length; i++) {
if (data[i].match(/^(\d+|\d+[.]\d+)%?$/)) {
result.push(data[i]);
}
}
document.write(JSON.stringify(result));
keine Notwendigkeit, irgendwelche Bibliotheken zu verwenden, hat reines '' RegExp'-Objekt 'exec'-Methode, die das gleiche tut. – teran
Dies wird Ihr Problem umgehen und neue Array erstellen mit nur gute Elemente:
function check_percentage(num){
var regex = /^(\d+%)$/;
if (num.match(regex)){
return true;
}
}
var result=["babab","fg210%","120%","babab","4214210%","20%"],
filtered_result=[];
result.forEach(function(k,v){
if (check_percentage(k)){
filtered_result.push(k);
}
});
console.log(filtered_result);
Ich bezweifle diese Zahlen sind .. – Rayon
gibt es viele Möglichkeiten, um ein solches Ergebnis zu erzielen, aber zeigen Sie zuerst Ihren Code. – teran
Was genau definiert eine Nummer, die Sie behalten möchten? Sind es Ziffern gefolgt von einem '%' Symbol? Hast du versucht, einen [regulären Ausdruck] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions) dafür zu schreiben und ihn mit [Array # filter] zu verwenden (https: // developer. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)? – Ryan