tengo pocas listas como esta
a = [ 2, 47-54, 68-69, 120-121, 318, 320, 342, 364-366, 414-422, 503-505, 513-514, 529, 554, 586, 690, 775, 913, 1018, 1117, 1159, 1183, 1218-1219, 1379, 1478, 1491, 1497, 1510, 1562, 1601, 1664, 1673, 1686, 1692, 1710, 1759-1765, 1862-1881, 1951-1962, 1992, 2020 ] b = [ 18, 28, 34-35, 58-84, 110-137, 139-191, 193-272 ] value of b = 192Tratando de obtener un código javascript simple para obtener el número total de valores entre diferentes rangos y también agregar números individuales como mencioné para el valor de b.
puedes hacer algo como esto
const b = [ '18', '28', '34-35', '58-84', '110-137', '139-191', '193-272' ] const calculateTotalNumbers = data => data.reduce((res, n) => { const [n1, n2] = n.split('-').map(Number) if(n2){ return res + n2 - n1 + 1 } return res + 1 }, 0) console.log(calculateTotalNumbers(b))Puedes hacerlo usando Array.prototype.reduce .
const lines = ["18", "28", "34-35", "58-84", "110-137", "139-191", "193-272"], result = lines.reduce((r, line) => { const [start, stop = start] = line.split("-").map(Number); return r + stop - start + 1; }, 0); console.log(result); Nota: Para manejar líneas individuales, he predeterminado stop to start .
Puede iterar sobre los valores en la matriz usando reduce , dividiendo los valores en a - y agregando 1 (cuando no hay - ) o la diferencia entre los valores final e inicial (+1 para rangos inclusivos) al resultado:
const b = ['18', '28', '34-35', '58-84', '110-137', '139-191', '193-272'] const numsInc = (arr) => arr.reduce((acc, v) => { [s, e] = v.split('-'); acc += e ? parseInt(e,10)-parseInt(s,10)+1 : 1 return acc; }, 0) const numsExc = (arr) => arr.reduce((acc, v) => { [s, e] = v.split('-'); acc += e ? parseInt(e,10)-parseInt(s,10) : 1 return acc; }, 0) console.log(numsInc(b)) console.log(numsExc(b))