Tengo una matriz de JavaScript:
const arr = ['a', 'b', 1, 4, 6, 'John', 9, 91];
Solo quiero mantener los números enteros y filtrar las cadenas y los caracteres. Hay alguna forma de hacerlo ? Probé con typeof()
pero no funciona. Gracias por adelantado.
Puede usar Array.prototype.filter y filtrar los elementos que son números usando el operador typeof .
const arr = ["a", "b", "1", 4, 6, "John", 9, 91], nums = arr.filter((a) => typeof a === "number"); console.log(nums);
Otro enfoque
También puedes hacerlo coaccionando los artículos a un número. Las cadenas que no se pueden forzar a un número dan como resultado NaN
, un valor falso en JS, y por lo tanto se filtran.
const arr = ["a", "b", 1, 4, 6, "John", 9, 91], nums = arr.filter(Number); console.log(nums);
Pero tenga en cuenta que las cadenas que se pueden forzar a números como "1"
, "123"
, etc. no serán filtradas por el segundo enfoque.
Y lo que es más importante, este enfoque filtraría todos los ceros ( 0
, "0"
) en la matriz, ya que 0
es un valor falso en JS.
const arr = ["1", "4", "6", 0, "0"], nums = arr.filter(Number); console.log(nums);
Filtrado de enteros
También puede filtrar solo números enteros usando Number.isInteger
const arr = ["1", 2, -3, 4.5], ints = arr.filter(Number.isInteger); console.log(ints);
Pero tenga en cuenta que este enfoque no filtraría los números en los que la parte integral del número es igual al número en sí. En otras palabras, simplemente agregar ceros después del punto decimal (como 1.00000
) no daría false
cuando se pasa a isInteger
.
const arr = [1.0, 2.01], ints = arr.filter(Number.isInteger); console.log(ints);
prueba esto:
arr.filter((elem) => Number.isInteger(elem));
output = [1,4,6,9,91]
const arr = ['a', 'b', 1, 4, 6, 'John', 9, 91]; const number = arr.filter(item => typeof item === 'number') console.log(number )
aquí la forma correcta