Estoy tratando de contar dinámicamente las horas trabajadas para una identificación individual. Actualmente, si quiero contar las horas para la identificación 1, por ejemplo, tengo que codificar el valor de identificación y hacer el conteo. ejemplo a continuación. Estoy usando tablas de datos, por lo que eventualmente habrá cientos de filas.
var array = [{id: 1, horas: 10}, {id: 1, horas: 12}, {id: 2, horas: 6}, {id: 2, horas: 11} {id: 3, horas: 12}, {id: 3, horas: 8}]
var array = dataTable.rows().data().toArray(); array.filter((h) => { if (h.id == '1' && (count += h.hours) > 5) { 'do something' } else {'do something'} })¿Cómo cuento las horas de cada 'id' dinámicamente sin codificar el valor de id gracias
Parece que podría usar .map() aquí sobre el filter . Envolvería su filtro/mapa en una función con un argumento de id de esa manera, puede pasar la identificación cada vez que llama a la función, sin codificarla.
var array = [{id: 1, hours: 10},{id: 1, hours: 12}, {id: 2, hours: 6}, {id: 2, hours: 11} {id: 3, hours: 12}, {id: 3, hours: 8}] const countHours = (id) => { array.map(item => { if (item.id === id && item.hours > 5) { return 'do something' } else { return 'do something'} }) } // call it like so... countHours(1)Podría hacer una función para filtrar la matriz y usar reducir para sumar todos los valores de 'horas'.
var arr = [{id: 1, hours: 10},{id: 1, hours: 12}, {id: 2, hours: 6}, {id: 2, hours: 11}, {id: 3, hours: 12}, {id: 3, hours: 8}] function sumIdHours(id){ var hourSum = arr.filter(x => x.id === id).reduce((a, b) => a + b.hours, 0) return hoursSum } //eg sumIdHours(1)Podría envolver esta lógica en una función que reciba el argumento id:
function hoursById (id) { let count = 0; const array = dataTable.rows().data().toArray(); array.forEach((h) => { if (h.id == id && (count += h.hours) > 5) { 'do something' } else { 'do something'} }) return count; }Entonces puedes invocar la función como
hoursById('1') // return count for id 1 hoursById('2') // return count for id 2