У меня есть массив var data = ["test", "10%", "abc", "20%"];Как отфильтровать число из массива строк
Теперь есть ли способ, так что я могу отфильтровать и получить только цифры что-то вроде result=["10%","20%"];
У меня есть массив var data = ["test", "10%", "abc", "20%"];Как отфильтровать число из массива строк
Теперь есть ли способ, так что я могу отфильтровать и получить только цифры что-то вроде result=["10%","20%"];
Вы можете использовать этот function
:
Объяснение: Мы создаем новый массив и нажмите все элементы старого массива,
если первая буква могут быть преобразованы в цифры.
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));
Спасибо за решение, вы получили вопрос правильно и получили мне то, что мне нужно – user1076698
Это будет включать в себя такие элементы, как «1xyz%», «2 /() abs» и т. Д. ... Вы только проверяете, что первый символ число. – henrikmerlander
@henrikmerlander Это правильно. Это всего лишь решение для такого типа сценариев.Если вопрос или ситуация будут более конкретными, нам придется изменить код. – John
var data = ["test", "10%", "abc", "20%"];
var result = [];
data.forEach(function(v) {
if (parseInt(v) > 0) result.push(parseInt(v));
});
console.log(result);
Если вы не нужны числа, а строковые значения, то просто замените : result.push (parseInt (v)); => result.push (v);
Вы можете использовать underscore library и сделать:
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>
И вы можете сделать то же самое без внешней библиотеки:
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));
Не нужно использовать какие-либо библиотеки, чистый JS 'RegExp' имеет метод' exec', который делает то же самое. – teran
Это будет работать ваши проблемы и создать новый массив с только хорошими элементами:
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);
Сомневаюсь те номера .. – Rayon
есть много способы достижения такого результата, но сначала покажите свой код. – teran
Что именно определяет число, которое вы хотите сохранить? Это цифры, за которыми следует символ '%'? Вы пробовали написать [регулярное выражение] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions) для этого и использовать его с помощью [Array # filter] (https: // developer. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)? – Ryan