Dado un número variable de argumentos enteros, devuelve los dígitos que no están presentes en ninguno de ellos.
Ejemplo:
[12, 34, 56, 78] => "09" [2015, 8, 26] => "3479"Nota: los dígitos de la cadena resultante deben ordenarse.
Ayuda por favor, cómo hacer esto con un código corto y simple, ¿qué método debo usar? RegEx para comparar?
function unusedDigits(numbers) { } console.log(unusedDigits([12, 34, 56, 78])); console.log(unusedDigits([2015, 8, 26]));Primero concatene los números en una sola cadena:
> [2015, 8, 26].join('') '2015826'Luego elimínelos de '0123456789':
> [...'0123456789'].filter(ch => !'2015826'.includes(ch)).join('') '3479' function unusedDigits(numbers) { const s = numbers.join(''); return [...'0123456789'].filter(ch => !s.includes(ch)).join(''); } console.log(unusedDigits([12, 34, 56, 78])); console.log(unusedDigits([2015, 8, 26])); Para una forma más eficiente si la entrada es enorme, puede crear un Set de dígitos en lugar de unirlos en una cadena.
Puede tomar un Set y eliminar los dígitos no deseados.
function unused (array) { return Array .from([...array.join('')].reduce( (s, v) => (s.delete(v), s), new Set('0123456789') )) .join('') } console.log(unused([12, 34, 56, 78])); // "09" console.log(unused([2015, 8, 26])); // "3479"Una aproximación con cortocircuito
function unused (array) { const s = new Set('0123456789'); [...array.join('')].every(v => (s.delete(v), s.size)); return Array .from(s) .join('') } console.log(unused([12, 34, 56, 78])); // "09" console.log(unused([2015, 8, 26])); // "3479"