Tengo una matriz de objetos y dentro de cada matriz tengo una lista de usuarios, cuando busco debería poder buscar a los usuarios y devolver el valor sin afectar la estructura existente. apilar
Lo he intentado pero no funciona, he compartido el enlace de stackblitz donde lo he hecho.
userList = [ { state: 'KL', level: 1, USERS: ['jane', 'kete'] }, { state: 'TN', level: 1, USERS: ['john', 'rock'] }, { state: 'MH', level: 2, USERS: ['rahul', 'ricky'] }, { state: 'AP', level: 2, USERS: ['ram', 'sham'] }, ]; handleSearch(kete) // search us an input field detailed in stackblitz link handleSearch = (e) => { this.userList = this.orgList; const user = this.searchFunction(this.userList, e.target.value); console.log(user); }; // search function searchFunction = (arr, searchVal) => { return arr.map((item) => { console.log(item); const data = item.USERS.filter((user) => user.toLowerCase()?.includes(searchVal?.toLowerCase()) ); return { ...item, data }; }); };Puede usar filter() e includes() para filtrar los objetos donde el nombre de usuario está en la matriz USERS del objeto.
const userList = [ { state: 'KL', level: 1, USERS: ['jane', 'kete'] }, { state: 'TN', level: 1, USERS: ['john', 'rock'] }, { state: 'MH', level: 2, USERS: ['rahul', 'ricky'] }, { state: 'AP', level: 2, USERS: ['ram', 'sham'] }, ]; const findUser = (username, users) => { return users.filter(u => u.USERS.includes(username)); } console.log(findUser("rahul", userList));A medida que devuelve data en un objeto a través de { ...item, data } , conserva todos sus campos y agrega un nuevo campo llamado data con usuarios filtrados.
En cambio, lo que desea hacer es reemplazar la lista de USERS en el objeto del item actual.
searchFunction = (arr, searchVal) => { return arr.map((item) => { const data = item.USERS.filter((user) => user.toLowerCase()?.includes(searchVal?.toLowerCase()) ); return { ...item, USERS: data }; }); };Verifique esta solución: https://stackblitz.com/edit/angular-w1vi9e Básicamente, creamos una matriz de usuarios, y en cada valor de cambio de entrada de búsqueda, buscamos en la matriz de usuarios cualquier usuario cuyo nombre contenga el valor de búsqueda y mostramos sus nombres con fines de prueba.