Remove blank fields from an array

0
    for(var j =0; j<data.length; j++){
        var valorEmBranco = 0;
        for(var i =0; i<data[j].length; i++){
            var porcentagem = 0;
            var valorPorColuna = data[j][i].valor;
            //alert(valorPorColuna);
            if(data[j][i].nome ===""){
                valorEmBranco += data[j][i].valor;
            } else {
                porcentagem = (valorPorColuna / (totalDados-valorEmBranco)) * 100;
            }
            data[j][i]['porcentagem'] = porcentagem;

        }
    }

link

I'm having trouble calculating percentage. I need to "sift" the blank names and remove them from the total amount to do the percentage calculation. Let's say I have 4253 elements in total, I need to subtract from that value every time the name is equal to empty (""); That is, (4253-numberEmBranco), which in this case is 12 (by jsfiddle)

My multidimensional array:

    var data = [[{
        "nome": "SIM",
        "valor": 364
    },{
        "nome": "NÃO",
        "valor": 3877
    },{
        "nome": "",
        "valor": 12
    }]];


   porcentagem = (valorPorColuna / (totalDados-valorEmBranco)) * 100;

The calculation is not working. by the rule of 3, the correct for the names with "NO" = 91,41% and is giving 91,16% .

    
asked by anonymous 01.02.2016 / 19:47

2 answers

1

Hello, if I understand your problem right, you can do the following by JS:

Pass the result by a regular test expression, and ignore the ones that give false Ex:

var patt = /^([a-zA-Z])/g
if(patt.test(nome)) { //-- se virem em branco ou qualquer coisa q não seja alfabético retorna false
   //-- seu codigo
}

Ps: You can simplify your for a bit by using

$(data).each(function(){
   /* this é o elemento único dentro do each */
   //this.nome
   //this.valor
})
    
01.02.2016 / 19:55
0

Separating by steps might look like this:

// fazer uma array simples, não multidimensional
var flat = data.reduce(function(arr, _arr) {
    return arr.concat(_arr);
}, []);

// limpar os votos vazios
var limpa = flat.filter(function(el) {
    return el.nome;
});

// contar o numero máximo
var total = limpa.reduce(function(tot, el) {
    return tot + el.valor;
}, 0);

// calcular percentagens
var percentagens = limpa.map(function(voto) {
    return {
        nome: voto.nome,
        percentagem: voto.valor * 100 / total + '%'
    };
});

jsFiddle: link

    
01.02.2016 / 21:04