Это массив,

total = ["10%", 1000, "5%", 2000]. Как я могу отфильтровать их в два массива, как, процент = ["10%", "5%"] и абсолютный = [1000,2000], используя фильтр массива JavaScript.

2
Mukul Sharma 28 Авг 2017 в 12:47

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);
6
Mihai Alexandru-Ionut 20 Дек 2019 в 07:53

Вы можете использовать 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);
1
Ori Drori 28 Авг 2017 в 09:58
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);
1
alexmac 28 Авг 2017 в 10:05

Вы можете сделать это используя

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-ые элементы фильтра массива, которые являются строкой и имеют "%" в конце

0
marvel308 28 Авг 2017 в 09:51

Вы можете использовать регулярные выражения, поскольку в вашем массиве есть только строки.

За % :

total.filter(function(element){
    return /^[0-9]+\%$/gi.test(element);
});

Для абсолюта:

total.filter(function(element){
    return /^[0-9]+$/gi.test(element);
});
1
Stéphane Ammar 28 Авг 2017 в 09:53

Используйте этот код

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

0
Aditya 28 Авг 2017 в 10:02