Necesito mostrar un objeto con la lista de atributos existente y mostrar un número de veces que aparece:
Carga útil:
[ [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ] ]Resultado:
{ valor: 16, tipo_entrada: 9, dqta_entrada: 6 }siendo esa lista de atributos de forma dinámica, puede contener otros valores (valor, nombre, edad...)
Puede aplanar su matriz usando array#flat() y luego usar array#reduce para contar la frecuencia de cada palabra.
const arr = [ [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ] ], result = arr.flat().reduce((r, word) => { r[word] = (r[word] ?? 0) + 1; return r; },{}); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }Aquí hay una sola línea:
var mainData = [ [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ] ] var resultObj = {}; mainData.map(data => data.forEach(subData => { resultObj[subData] = (Object.keys(resultObj).indexOf(subData) == -1 ? 1 : resultObj[subData] + 1) })) console.log(resultObj)Puedes usar plano y jugar con él.
Este código define y explica una forma de resolver su problema:
const result = {}; const initialArray = [['tomato'], ['ketchup', 'potato']]; const strings = initialArray.flat(); // ['tomato', 'ketchup', 'potato'] for (const string of strings) { // string is 'tomato' for example // result[string] would then be result[tomato] if (result[string]) { result[string] += 1; // result.tomato already exists? Add 1 to it } else { result[string] = 1; // if it does not exists, create it with value 1 } }