Это массив,
total = ["10%", 1000, "5%", 2000]
. Как я могу отфильтровать их в два массива, как, процент = ["10%", "5%"] и абсолютный = [1000,2000], используя фильтр массива JavaScript.
6 ответов
Вы должны использовать метод filter
, который принимает функцию callback
.
Метод filter () создает новый массив со всеми элементами, которые проходят проверку, реализованную предоставленной функцией.
Также используйте typeof
operator , чтобы узнать тип элемента из массива. Оператор typeof возвращает строку, указывающую тип неоцененного операнда.
let total = ["10%", "1000", "5%", "2000"];
let percentage = total.filter(function(item){
return typeof item == 'string' && item.includes('%');
});
console.log(percentage);
let absolute = total.filter(function(item){
return typeof item == 'number' || !isNaN(item);
});
console.log(absolute);
Вы можете использовать Array # lower для разделения массива:
const total = ["10%", 1000, "5%", 2000];
const { absolute, percentage } = total.reduce((arrs, item) => {
const key = typeof item === 'number' ? 'absolute' : 'percentage';
arrs[key].push(item);
return arrs;
}, { percentage: [], absolute: [] });
console.log(absolute);
console.log(percentage);
let total = ["10%", 1000, "5%", 2000];
let percents = total.filter(item => item.toString().includes('%'));
let numbers = total.filter(item => !item.toString().includes('%'));
console.log(percents, numbers);
Вы можете сделать это используя
let total = ["10%", 1000, "5%", 2000]
let result1 = total.filter(function(element){
if(typeof element == "number"){
return 1;
}
return 0;
})
let result2 = total.filter(function(element){
if(typeof element == "string" && element.match(/\%$/)){
return 1;
}
return 0;
})
console.log(result1, result2);
первый массив фильтрует все числа
2-ые элементы фильтра массива, которые являются строкой и имеют "%" в конце
Вы можете использовать регулярные выражения, поскольку в вашем массиве есть только строки.
За % :
total.filter(function(element){
return /^[0-9]+\%$/gi.test(element);
});
Для абсолюта:
total.filter(function(element){
return /^[0-9]+$/gi.test(element);
});
Используйте этот код
$array = array('10%', '1000', '20%','2000');
// для отображения целого числа из массива
Print_r (array_filter ($ array, function ($ var) {return (stripos ($ var, '%') === false);}));
// для шоу% array
Print_r (array_filter ($ array, function ($ var) {return (stripos ($ var, '%') == true);}));
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.