Group and concatenate columns of more than one row in a Javascript, such as STUFF in SQL

4
    //VALORES ACTUALES
{Posicion: 0, Texto: "M1", Elemento: "Cr", Rango: "1.00-1.50"}
{Posicion: 0, Texto: "M1", Elemento: "Mo", Rango: "0.30-0.65"}
{Posicion: 1, Texto: "M2", Elemento: "Cr", Rango: "1.23-1.50"}
{Posicion: 1, Texto: "M2", Elemento: "Nb", Rango: "1.00-1.23"}
{Posicion: 1, Texto: "M2", Elemento: "V", Rango: "0.45-1.50"}
{Posicion: 2, Texto: "M3", Elemento: "Cr", Rango: "1.00-1.50"}

//VALORES DESEADOS
{Posicion: 0, Texto: "M1", Elemento: "Cr,Mo", Rango: "1.00-1.50,0.30-0.65"}
{Posicion: 2, Texto: "M2", Elemento: "Cr,Nb,V", Rango: "1.23-1.50,1.00-1.23,0.45-1.50"}
{Posicion: 3, Texto: "M3", Elemento: "Cr", Rango: "1.00-1.50"}

//VALORES DE ALEANTES
    {AleanteID: 1, Elemento: "Cr,Mo", Rango: "1.00-1.50,0.30-0.65"}
    {AleanteID: 2, Elemento: "Cr,Mo,V", Rango: "8.00-9.50,0.85-1.05,0.15-0.30"}

Even with what I have I can not get the desired result:

 var min = 0, max = 0;
var result = [];
if (dataElementos.length > 0) {
    for (var i = 0; i < dataElementos.length; i++) {
        for (var j = 0; j < aleantes.length; j++) {
            //if (dataElementos[i].Posicion == i) {
                if (dataElementos[i].Elemento == aleantes[j].Elemento) {
                    min = parseFloat(aleantes[j].Rango.split("-")[0]).toFixed(2);
                    max = parseFloat(aleantes[j].Rango.split("-")[1]).toFixed(2);
                    if (parseFloat(dataElementos[i].Valor).toFixed(2) >= min && parseFloat(dataElementos[i].Valor).toFixed(2) <= max) {
                        result.push({ Posicion: i, Texto: dataElementos[i].Text, Elemento: dataElementos[i].Elemento, Valor: dataElementos[i].Valor});
                    }                       
                }
            //}                
        }
    }
}
return result;

I hope if someone can guide me to get the desired result (similar to the SQL Server STUFF) in advance thank you.

    
asked by Fabian Gutierrez 25.09.2018 в 00:24
source

1 answer

2

To get the desired result, you only need a for like this:

var dataElementos = [{Posicion: 0, Texto: "M1", Elemento: "Cr", Rango: "1.00-1.50"},
{Posicion: 0, Texto: "M1", Elemento: "Mo", Rango: "0.30-0.65"},
{Posicion: 1, Texto: "M2", Elemento: "Cr", Rango: "1.23-1.50"},
{Posicion: 1, Texto: "M2", Elemento: "Nb", Rango: "1.00-1.23"},
{Posicion: 1, Texto: "M2", Elemento: "V", Rango: "0.45-1.50"},
{Posicion: 2, Texto: "M3", Elemento: "Cr", Rango: "1.00-1.50"}];

var result = [dataElementos[0]];
var j = 0;
if (dataElementos.length > 0) {
    for (var i = 1; i < dataElementos.length; i++) {            
        if (dataElementos[i].Texto == result[j].Texto) {
            result[j].Elemento = result[j].Elemento + ',' + dataElementos[i].Elemento;
            result[j].Rango = result[j].Rango + ',' + dataElementos[i].Rango;
        } else {
            result.push(dataElementos[i]);
            j++;              
        }
    }
    
}
console.log(result);
    
answered by 25.09.2018 / 00:52
source