2016-03-30 2 views
0

У меня есть массив var data = ["test", "10%", "abc", "20%"];Как отфильтровать число из массива строк

Теперь есть ли способ, так что я могу отфильтровать и получить только цифры что-то вроде result=["10%","20%"];

+1

Сомневаюсь те номера .. – Rayon

+0

есть много способы достижения такого результата, но сначала покажите свой код. – teran

+1

Что именно определяет число, которое вы хотите сохранить? Это цифры, за которыми следует символ '%'? Вы пробовали написать [регулярное выражение] (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

ответ

1

Вы можете использовать этот 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));

+0

Спасибо за решение, вы получили вопрос правильно и получили мне то, что мне нужно – user1076698

+0

Это будет включать в себя такие элементы, как «1xyz%», «2 /() abs» и т. Д. ... Вы только проверяете, что первый символ число. – henrikmerlander

+0

@henrikmerlander Это правильно. Это всего лишь решение для такого типа сценариев.Если вопрос или ситуация будут более конкретными, нам придется изменить код. – 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);

Если вы не нужны числа, а строковые значения, то просто замените : result.push (parseInt (v)); => result.push (v);

0

Вы можете использовать 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));

+0

Не нужно использовать какие-либо библиотеки, чистый JS 'RegExp' имеет метод' exec', который делает то же самое. – teran

0

Это будет работать ваши проблемы и создать новый массив с только хорошими элементами:

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/

Смежные вопросы