tengo la siguiente matriz
const arr = [ { id: 1, token: "aAdsDDwEwe43svdwe2Xua" }, { id: 2, token: undefined } ];Y necesito filtrar tokens indefinidos e ignorar el campo de identificación.
Algo como:
const arr = [ { id: 1, token: "aAdsDDwEwe43svdwe2Xua" }, { id: 2, token: undefined }, ]; const result = arr .filter(({ token }) => token !== undefined) .map(({ token }) => token); console.log(result);¿Es posible hacerlo en O(n)? Quiero decir, sin navegar por la lista dos veces.
const result = arr.reduce((acc,curr) => { return curr.token !==undefined ? [...acc,curr.token] : acc },[])En primer lugar es O(n) . Solo porque ejecutamos un bucle dos veces, no se convierte en O(n^2) .
Además, si simplemente usa un bucle for, se dará cuenta de lo simple que es:
const arr = [ { id: 1, token: "aAdsDDwEwe43svdwe2Xua", extraField : "x" }, { id: 2, token: undefined, extraField : "x" } ]; let ans = []; for(let i = 0 ; i < arr.length; i++){ if(arr[i].token!== undefined){ let { id, ...newBody } = arr[i]; ans.push(newBody); } } console.log(ans); Operador de propagación utilizado (...), para eliminar una propiedad en particular (aquí id ). Si está buscando métodos de matriz, lo anterior también se puede lograr usando un .forEach()