Tengo 2 matrices como esta:
blockedUsers = ['u1', 'u2', 'u3'] videoList = [ { id: 1, mp4URL: '...mp4', user: { id: 'u1', name: 'User 1' } }, { id: 2, mp4URL: '...mp4', user: { id: 'u2', name: 'User 1' } }, { id: 3, mp4URL: '...mp4', user: { id: 'u5', name: 'User 1' } } ]Quiero eliminar a los usuarios bloqueados de la matriz de video. Al final, obtendré una matriz con 1 video de u5. ¿Como hacer eso?
Gracias
Filtre los elementos donde la identificación del usuario no está incluida en los usuarios bloqueados.
videoList.filter(v => !blockedUsers.includes(v.user.id))Puede filtrar la lista mediante el método Array.prototype.includes() .
const blockedUsers = ['u1', 'u2', 'u3'], videoList = [ { id: 1, mp4URL: '...mp4', user: { id: 'u1', name: 'User 1' } }, { id: 2, mp4URL: '...mp4', user: { id: 'u2', name: 'User 1' } }, { id: 3, mp4URL: '...mp4', user: { id: 'u5', name: 'User 1' } } ], allowedVideos = videoList.filter(({ user: { id } }) => !blockedUsers.includes(id)); console.log(allowedVideos); .as-console-wrapper { top: 0; max-height: 100% !important; }Hay dos maneras
En primer lugar, puede filtrar la lista de videoList e iterar para verificar si el usuario está en la lista bloqueada. Podríamos hacer esto con .includes para blockedUsers , pero de esta forma resultará en la complejidad de O(n*m) , dado que n es la longitud de los blockedUsers y m es la longitud de la lista de videoList
En segundo lugar, primero podría convertir los blockedUsers en una tabla hash usando Set . Esto reducirá la complejidad del tiempo de consulta para blockedUsers de O(n) a O(1) . De esta forma, la complejidad temporal total sería O(n + m) , que es mejor que la primera forma
const blockedUsers = ["u1", "u2", "u3"] const videoList = [ { id: 1, mp4URL: "...mp4", user: { id: "u1", name: "User 1", }, }, { id: 2, mp4URL: "...mp4", user: { id: "u2", name: "User 1", }, }, { id: 3, mp4URL: "...mp4", user: { id: "u5", name: "User 1", }, }, ] const blockedUsersHashTable = new Set(blockedUsers) const res = videoList.filter( ({ user: { id } }) => !blockedUsersHashTable.has(id) ) console.log(res)Si la complejidad del tiempo no es su preocupación, simplemente vaya con la primera forma.