En JavaScript, quiero contar la cantidad de veces que "N" está en la primera, segunda, tercera y cuarta columna. Me quiero unos a otros hay valores. Quiero obtener la cantidad de ocurrencias en una matriz en una matriz y luego obtener cuatro números iguales a las ocurrencias.
aporte:
var set =[ ['N', 'N', 'Y', 'N'], ['1', 'N', '2', 'N'], ['N', '1', '4', 'N'], ['2', 'N', 'N', '1']]salida: 3 2 2 2
const set = [ ['N', 'N', 'Y', 'N'], ['1', 'N', '2', 'N'], ['N', '1', '4', 'N'], ['2', 'N', 'N', '1'], ]; const countNs = row => row.reduce((acc, curr) => acc + (curr === 'N' ? 1 : 0), 0); // number of Ns in each row console.log(set.map(countNs)); const transpose = a => a[0].map((_, c) => a.map(r => r[c])); // Number of Ns in each column console.log(transpose(set).map(countNs));El recuento total de la ocurrencia de columna de un valor dado de una tabla debe seguir un enfoque similar a la transposición de una tabla en una matriz.
Una implementación genérica basada en dos tareas de reduce anidadas podría parecerse al siguiente código proporcionado...
// function transpose(result, row) { // return row.reduce((matrix, value, idx) => { // // (matrix[idx] ??= []).push(value); // return matrix; // // }, result); // } function aggregateColumnValueCount(collector, row) { // return row.reduce(({ value, counts = {} }, currentValue, idx) => { return row.reduce(({ value, counts = [] }, currentValue, currentColumn) => { // const currentColumn = `column_${ idx + 1 }`; const currentCount = (counts[currentColumn] ??= 0); if (currentValue === value) { counts[currentColumn] = currentCount + 1; } return { value, counts }; }, collector); } const table = [ ['N', 'N', 'Y', 'N'], ['1', 'N', '2', 'N'], ['N', '1', '4', 'N'], ['2', 'N', 'N', '1'], ]; console.log( "column counts for value 'N' ...", table .reduce(aggregateColumnValueCount, { value: 'N', counts: [], // counts: {}, }).counts ); console.log( // table.reduce(aggregateColumnValueCount, { value: '2', counts: {} }) table.reduce(aggregateColumnValueCount, { value: '2', counts: [] }) ); .as-console-wrapper { min-height: 100%!important; top: 0; }