Javascript - Logical Manipulate Array Data

0

I have a very complex logic problem. I have to compare 4 arrays and get them to work together. I'll explain better

Example of how you can come:

var mesA = [ "fev", "mar", "jun" ]
var valorA = [ 50,   50,    50 ]

var mesB = [ "jan", "fev", "mar", "jul", "ago" ]
var valorB = [ 25,    25,   25,    25,    25 ]

var mesA_Final = []
var valorA_Final = []

var mesB_Final = []
var valorB_Final = []

How should the output of this be:

var mesA_Final = [ "jan", "fev", "mar", "jun", "jul", "ago"  ]
var valorA_Final = [ 0,     50,    50,   50,     0,     0    ]

var mesB_Final = [ "jan", "fev", "mar", "jun", "jul", "ago"  ]
var valorB_Final = [ 25,   25,    25,     0      25    25    ]

I need to make a comparison of these 2 arrays, order them by the name of the month, and compare the two arrays so that they take their differences and insert value 0 in the month that one has and the other does not, and vice versa. / p>

  

Obs¹: These 4 arrays will always come with correct month and value, if for example 3 months, 3 values will come.   
Obs2: What will come in the array of arrays is dynamic, can come 1 month 1 value, how can 2 months come 2 values, 3 months 3 values

The most I got was this: JSFiddle

Does anyone have an idea?

    
asked by anonymous 05.10.2017 / 17:19

1 answer

1

This should do what you want (commented):

var mesA = [ "fev", "mar", "jun" ]
var valorA = [ 50,   50,    50 ]

var mesB = [ "jan", "fev", "mar", "jul", "ago" ]
var valorB = [ 25,    25,   25,    25,    25 ]

var mesA_Final = []
var valorA_Final = []

var mesB_Final = []
var valorB_Final = []

// criei uma array com a ordem dos meses. necessário para organizar as arrays mesA_Final e mesB_Final
var meses = ['jan','fev','mar', 'abr','mai','jun','jul','ago','set','out','nov','dez'];

function rodar(){
    // verificar se valores em mesB tem em mesA
    $.each(mesB,function(e,v){
        mesA_Final.push(v);
    });

    // inserir valores de mesA em mesA_final
    $.each(mesA,function(e,v){
        if(mesA_Final.indexOf(v) == -1){
            mesA_Final.push(v);
        }
    });

    // organizar valores na ordem do mês
    mesA_Final.sort(function(a,b){
        return meses.indexOf(a) > meses.indexOf(b);
    });

    // inserir valores em valorA_Final
    $.each(mesA_Final,function(e,v){
        if(mesA.indexOf(v) == -1){
            valorA_Final.push(0);
        }else{
            valorA_Final.push(valorA[mesA.indexOf(v)]);
        }
    });

    // B

    // verificar se valores em mesA tem em mesB
    $.each(mesA,function(e,v){
        mesB_Final.push(v);
    });

    // inserir valores de mesB em mesB_final
    $.each(mesB,function(e,v){
        if(mesB_Final.indexOf(v) == -1){
            mesB_Final.push(v);
        }
    });

    // organizar valores na ordem do mês
    mesB_Final.sort(function(a,b){
        return meses.indexOf(a) > meses.indexOf(b);
    });

    // inserir valores em valorB_Final
    $.each(mesB_Final,function(e,v){
        if(mesB.indexOf(v) == -1){
            valorB_Final.push(0);
        }else{
            valorB_Final.push(valorB[mesB.indexOf(v)]);
        }
    });
}

var mesA = [ "fev", "mar", "jun" ]
var valorA = [ 50,   50,    50 ]

var mesB = [ "jan", "fev", "mar", "jul", "ago" ]
var valorB = [ 25,    25,   25,    25,    25 ]

var mesA_Final = []
var valorA_Final = []

var mesB_Final = []
var valorB_Final = []

// criei uma array com a ordem dos meses. necessário para organizar as arrays mesA_Final e mesB_Final
var meses = ['jan','fev','mar', 'abr','mai','jun','jul','ago','set','out','nov','dez'];

function rodar(){
	// verificar se valores em mesB tem em mesA
	$.each(mesB,function(e,v){
		mesA_Final.push(v);
	});

	// inserir valores de mesA em mesA_final
	$.each(mesA,function(e,v){
		if(mesA_Final.indexOf(v) == -1){
			mesA_Final.push(v);
		}
	});
	
	// organizar valores na ordem do mês
	mesA_Final.sort(function(a,b){
		return meses.indexOf(a) > meses.indexOf(b);
	});

	// inserir valores em valorA_Final
	$.each(mesA_Final,function(e,v){
		if(mesA.indexOf(v) == -1){
			valorA_Final.push(0);
		}else{
			valorA_Final.push(valorA[mesA.indexOf(v)]);
		}
	});

	// B

	// verificar se valores em mesA tem em mesB
	$.each(mesA,function(e,v){
		mesB_Final.push(v);
	});

	// inserir valores de mesB em mesB_final
	$.each(mesB,function(e,v){
		if(mesB_Final.indexOf(v) == -1){
			mesB_Final.push(v);
		}
	});
	
	// organizar valores na ordem do mês
	mesB_Final.sort(function(a,b){
		return meses.indexOf(a) > meses.indexOf(b);
	});

	// inserir valores em valorB_Final
	$.each(mesB_Final,function(e,v){
		if(mesB.indexOf(v) == -1){
			valorB_Final.push(0);
		}else{
			valorB_Final.push(valorB[mesB.indexOf(v)]);
		}
	});
	
	// daqui pra baixo é apenas para apresentação, pode apagar essas linhas
	$.each(mesA_Final,function(e,v){
		$("#teste").append(v+", ");
	});
	
	$("#teste").append("<br>");

	$.each(valorA_Final,function(e,v){
		$("#teste").append(v+", ");
	});

	$("#teste").append("<br><br>");

	$.each(mesB_Final,function(e,v){
		$("#teste").append(v+", ");
	});
	
	$("#teste").append("<br>");

	$.each(valorB_Final,function(e,v){
		$("#teste").append(v+", ");
	});
	
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><inputtype="button" value="Checar" onclick="rodar()" />
<br />
<br />
<div id="teste"></div>
    
05.10.2017 / 20:29