2016-03-30 13 views
0

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%"];

+1

Ich bezweifle diese Zahlen sind .. – Rayon

+0

gibt es viele Möglichkeiten, um ein solches Ergebnis zu erzielen, aber zeigen Sie zuerst Ihren Code. – teran

+1

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

Antwort

1

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));

+0

Danke für die Lösung, Sie haben die Frage richtig und haben mir, was ich brauchte – user1076698

+0

Dies wird Elemente wie "1xyz%", "2 /() abs" und so weiter ... Sie überprüfen nur, dass das erste Zeichen ist eine Zahl. – henrikmerlander

+0

@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

0

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);

0

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));

+0

keine Notwendigkeit, irgendwelche Bibliotheken zu verwenden, hat reines '' RegExp'-Objekt 'exec'-Methode, die das gleiche tut. – teran

0

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); 

https://jsfiddle.net/LLc1zp9h/