How to convert a separate string into comma and letter "and" at the end to an array from the existing numbers?

Asked

Viewed 65 times

0

How could I extract from a string like this:

var texto = '4°, 5° e 6° ano';

A result like this:

var array = [
   4,
   5,
   6 
];

Or even better this way:

var array = [
   '4° ano',
   '5° ano',
   '6° ano'
];

I tried to do it, but it didn’t work out so well:

 $scope.filterRecomendations = function(recomend) {
   var list = recomend.split(' e ');
   var collection = [];
   for(var i in list) {
      list[i].split(', ')
      collection.push(list[i]);
   }
    collection.flat(Infinity); 
    return collection;
 };

Printed a weird thing like that on ng-repeat:

[["4º"]["5º"]["6º ano"]]

Example when there is only one class:

inserir a descrição da imagem aqui

2 answers

0


I think I found a solution:

$scope.filterRecomendations = function(recomend) {
    var list = recomend.match(/\d+/g); 
        list.sort(function(x,y){        
                    return x - y;
        });
        var collection = [];
        for (var i in list) {
            collection.push(list[i]+'° ano');
        }
    return collection;
};

0

You are ignoring the result of the second split and ends up playing his own list[i] in the results. The same applies to flat, which returns another array, but you simply ignore the return.

One way to do it would be to remove the "year" from the end, then do the split by "and" or comma, and then add "year" in all:

let recomend = '4°, 5° e 6° ano';
let collection = [];
if (recomend.endsWith(' ano')) { // se termina com " ano"
    collection = recomend
        // retira o " ano"
        .slice(0, -4)
        // separa por vírgula ou "e", com espaços opcionais antes e depois
        .split(/\s*[e,]\s*/)
        // adiciona " ano" no final de todos
        .map(e => `${e} ano`);
}
console.log(collection); // [ '4° ano', '5° ano', '6° ano' ]

Or in your case:

$scope.filterRecomendations = function(recomend) {
    let collection = [];
    if (recomend.endsWith(' ano')) { // se termina com " ano"
        collection = recomend
            // retira o " ano"
            .slice(0, -4)
            // separa por vírgula ou "e", com espaços opcionais antes e depois
            .split(/\s*[e,]\s*/)
            // adiciona " ano" no final de todos
            .map(e => `${e} ano`);
    } // não sei o que deve fazer se não termina com " ano", então deixei assim mesmo
    return collection;
};

Browser other questions tagged

You are not signed in. Login or sign up in order to post.