Tengo un problema con la creación de una matriz filtrada. Tengo una variable llamada _xData que es un grupo de datos; Lo hago por ciclo para ver todas las filas de mi variable y el registro es similar a esto:

  • {IdQuiz: "1", Blocco: "00451", Domanda: "01", Risposta: "TRUE", Capitolo: "00",…}
  • {IdQuiz: "2", Blocco: "00451", Domanda: "02", Risposta: "FALSE", Capitolo: "00",…}
  • {IdQuiz: "3", Blocco: "00451", Domanda: "03", Risposta: "FALSE", Capitolo: "00",…}
  • IdQuiz: "4", Blocco: "00450", Domanda: "01", Risposta: "TRUE", Capitolo: "00",…}
  • {IdQuiz: "5", Blocco: "00450", Domanda: "02", Risposta: "FALSE", Capitolo: "00",…}
  • {IdQuiz: "6", Blocco: "00450", Domanda: "03", Risposta: "FALSE", Capitolo: "00",…}
  • {IdQuiz: "7", Blocco: "00452", Domanda: "01", Risposta: "TRUE", Capitolo: "00",…}
  • {IdQuiz: "8", Blocco: "00452", Domanda: "02", Risposta: "FALSE", Capitolo: "00",…}
  • {IdQuiz: "9", Blocco: "00452", Domanda: "03", Risposta: "FALSE", Capitolo: "00",…} ...

Este registro continúa por 1545 filas.

Hago esto para filtrar una matriz en la que hay tres filas con el mismo "Blocco",

Intenté así, pero solo obtuve la primera aparición:

 for (var i = 0; i < _xData.length; i++) {
        blocco = _xData[i].Blocco;
        console.log(_xData[i]);
        if (blocco == _xData[k].Blocco) {
            //console.log(_xData[i]);
            tot = array.push(_xData[i]);

        }
    }console.log("ARRAY =", array);

En este registro tengo:

  • {IdQuiz: "1", Blocco: "00451", Domanda: "01", Risposta: "TRUE", Capitolo: "00",…}
  • {IdQuiz: "2", Blocco: "00451", Domanda: "02", Risposta: "FALSE", Capitolo: "00",…}
  • {IdQuiz: "3", Blocco: "00451", Domanda: "03", Risposta: "FALSE", Capitolo: "00",…}

¿Cómo puedo obtener todas las matrices (545) ya divididas en tripletes y filtradas por "Blocco"?

0
Massimo Pisano 26 ago. 2020 a las 12:13

2 respuestas

La mejor respuesta

Aquí hay una forma de hacerlo:

const _xData = [
    { IdQuiz: "1", Blocco: "00451", Domanda: "01", Risposta: "TRUE", Capitolo: "00" },
    { IdQuiz: "2", Blocco: "00451", Domanda: "02", Risposta: "FALSE", Capitolo: "00" },
    { IdQuiz: "3", Blocco: "00451", Domanda: "03", Risposta: "FALSE", Capitolo: "00" },
    { IdQuiz: "4", Blocco: "00450", Domanda: "01", Risposta: "TRUE", Capitolo: "00" },
    { IdQuiz: "5", Blocco: "00450", Domanda: "02", Risposta: "FALSE", Capitolo: "00" },
    { IdQuiz: "6", Blocco: "00450", Domanda: "03", Risposta: "FALSE", Capitolo: "00" },
    { IdQuiz: "7", Blocco: "00452", Domanda: "01", Risposta: "TRUE", Capitolo: "00" },
    { IdQuiz: "8", Blocco: "00452", Domanda: "02", Risposta: "FALSE", Capitolo: "00" },
    { IdQuiz: "9", Blocco: "00452", Domanda: "03", Risposta: "FALSE", Capitolo: "00" }
];

const array = Object.values(_xData.reduce((acc, cur) => {
    if (acc[cur.Blocco]) {
        acc[cur.Blocco].push(cur);
    } else {
        acc[cur.Blocco] = [cur];
    }
    return acc;
}, {}));

console.log("ARRAY =", array);
0
Hao Wu 26 ago. 2020 a las 09:22

Puede obtener el resultado deseado de esta manera

const groupBy = function(array, key) {
  return array.reduce(function(accumulator, item) {
    const groupValue = item[key];
    accumulator[groupValue] = accumulator[groupValue] || [];
    accumulator[groupValue].push(item);
    return accumulator;
  }, {});
};

const _xData = [
  { IdQuiz: "1", Blocco: "00451", Domanda: "01", Risposta: "TRUE", Capitolo: "00" },
  { IdQuiz: "2", Blocco: "00451", Domanda: "02", Risposta: "FALSE", Capitolo: "00" },
  { IdQuiz: "3", Blocco: "00451", Domanda: "03", Risposta: "FALSE", Capitolo: "00" },
  { IdQuiz: "4", Blocco: "00450", Domanda: "01", Risposta: "TRUE", Capitolo: "00" },
  { IdQuiz: "5", Blocco: "00450", Domanda: "02", Risposta: "FALSE", Capitolo: "00" },
  { IdQuiz: "6", Blocco: "00450", Domanda: "03", Risposta: "FALSE", Capitolo: "00" },
  { IdQuiz: "7", Blocco: "00452", Domanda: "01", Risposta: "TRUE", Capitolo: "00" },
  { IdQuiz: "8", Blocco: "00452", Domanda: "02", Risposta: "FALSE", Capitolo: "00" },
  { IdQuiz: "9", Blocco: "00452", Domanda: "03", Risposta: "FALSE", Capitolo: "00" }
];

const result = Object.values(groupBy(_xData, 'Blocco'));
console.log(result);
0
Chris Wu 26 ago. 2020 a las 09:58