Estoy tratando de encontrar el múltiplo común más pequeño de una matriz comparándolo con los valores en la otra usando % num === 0 . La respuesta debería ser 6, pero debido a que cada número en la primera matriz es verdadero al menos una vez, se devuelven todos. ¿Cómo encuentro el valor que solo es verdadero y nunca falso?
let arr = [1, 2, 3] function test(arr) { let x = [1, 2, 3, 4, 5, 6, 7, 8] for (let n of arr) { return x.filter(k => k % n === 0) } } console.log(test(arr))Necesita recorrer la matriz x y devolver el primer elemento que se divide por every valor en arr .
let arr = [1, 2, 3]; function test(arr) { let x = [1, 2, 3, 4, 5, 6, 7, 8]; for (let n of x) { if (arr.every((a) => n % a === 0)) { return n; } } } console.log(test(arr));También puede simplemente encontrar la solución usando Array.prototype.find .
const arr = [1, 2, 3], test = (arr) => [1, 2, 3, 4, 5, 6, 7, 8].find((n) => arr.every((a) => n % a === 0)); console.log(test(arr)); Nota: si x no está ordenado, primero tendrá que ordenarlo.
const arr = [1, 2, 3], test = (arr) => [8, 7, 6, 5, 4, 3, 2, 1] .sort((a, b) => a - b) .find((n) => arr.every((a) => n % a === 0)); console.log(test(arr));Actualización basada en el comentario de OP
Puede usar Array.prototype.filter y Array.prototype.some .
const arr = [1, 2, 3], test = (arr) => [1, 2, 3, 4, 5, 6, 7, 8].filter((n) => arr.some((a) => n / a === 2)); console.log(test(arr));Filtrar e intersectar
let arr = [1, 2, 3] let x = [1, 2, 3, 4, 5, 6, 7, 8] function test(arr) { let common = [] arr.forEach(n => common.push(x.filter(k => k % n === 0))) return common.reduce((acc, cur) => acc.filter(e => cur.includes(e))); } console.log(test(arr))Si x está ordenado, puede usar find y every
let arr = [1, 2, 3] let x = [1, 2, 3, 4, 5, 6, 7, 8, 12] let res = x.find(n => arr.every(a => n%a === 0)) console.log(res)si no clasificado x
let arr = [1, 2, 3] let x = [1, 12, 6, 4, 2, 7, 8] let res = [...x].sort((a,b)=> ab).find(n => arr.every(a => n%a === 0)) console.log(res)