Tengo los siguientes objetos:
const allMembers = { "-Lz8YxHiwp8QZW3TqAFn": { "first": "foo", "last": "bar", "uid": "-Lz8YxHiwp8QZW3TqAFn" }, "-Lz8YxHqQXWoaGOFRLrO": { "first": "foo", "last": "bar", "uid": "-Lz8YxHqQXWoaGOFRLrO" }, "-Lz8YxHsMItaaTVNyQRE": { "first": "foo", "last": "bar", "uid": "-Lz8YxHsMItaaTVNyQRE" }, "-Lz8YxHwuVBMWl0Go6C5": { "first": "foo", "last": "bar", "uid": "-Lz8YxHwuVBMWl0Go6C5" }, "-Lz8YxHy0S-QkDaE1PkX": { "first": "foo", "last": "bar", "uid": "-Lz8YxHy0S-QkDaE1PkX" }, } const attendanceData = { "-Lz8YxHiwp8QZW3TqAFn": true, "-Lz8YxHqQXWoaGOFRLrO": true, "-Lz8YxHsMItaaTVNyQRE": true, "-Lz8YxHwuVBMWl0Go6C5": false, "-Lz8YxHy0S-QkDaE1PkX": true, "-Lz8YxIFA1XGVmaNfNr3": false, "-Lz8YxIJVZnIIj7RgEzg": false, }Necesito limpiar todos los miembros para regresar solo si se encuentra como verdadero en los datos de asistencia. Aquí está mi intento, pero obviamente no funciona. Además, la forma en que lo estoy haciendo tiene que repetir el primero sobre las otras veces.
const membersHere = Object.keys(allMembers).filter(memEl => Object.keys(attendanceData).find(attendEl => memEl == attendEl));Convierta el objeto allMembers en una matriz de pares de valores clave mediante Object.entries .
Filtre los elementos que tienen valor true usando Array.prototype.filter .
Transforme la matriz nuevamente en un objeto usando Object.fromEntries .
const allMembers = {'-Lz8YxHiwp8QZW3TqAFn': {first: 'foo',last: 'bar',uid: '-Lz8YxHiwp8QZW3TqAFn'},'-Lz8YxHqQXWoaGOFRLrO': {first: 'foo',last: 'bar',uid: '-Lz8YxHqQXWoaGOFRLrO'},'-Lz8YxHsMItaaTVNyQRE': {first: 'foo',last: 'bar',uid: '-Lz8YxHsMItaaTVNyQRE'},'-Lz8YxHwuVBMWl0Go6C5': {first: 'foo',last: 'bar',uid: '-Lz8YxHwuVBMWl0Go6C5'},'-Lz8YxHy0S-QkDaE1PkX': {first: 'foo',last: 'bar',uid: '-Lz8YxHy0S-QkDaE1PkX'}}, attendanceData = {'-Lz8YxHiwp8QZW3TqAFn': true,'-Lz8YxHqQXWoaGOFRLrO': true,'-Lz8YxHsMItaaTVNyQRE': true,'-Lz8YxHwuVBMWl0Go6C5': false,'-Lz8YxHy0S-QkDaE1PkX': true,'-Lz8YxIFA1XGVmaNfNr3': false,'-Lz8YxIJVZnIIj7RgEzg': false}, filteredMembers = Object.fromEntries( Object.entries(allMembers).filter(([k]) => attendanceData[k]) ); console.log(filteredMembers);También puedes hacerlo usando Array.prototype.reduce
const allMembers = {'-Lz8YxHiwp8QZW3TqAFn': {first: 'foo',last: 'bar',uid: '-Lz8YxHiwp8QZW3TqAFn'},'-Lz8YxHqQXWoaGOFRLrO': {first: 'foo',last: 'bar',uid: '-Lz8YxHqQXWoaGOFRLrO'},'-Lz8YxHsMItaaTVNyQRE': {first: 'foo',last: 'bar',uid: '-Lz8YxHsMItaaTVNyQRE'},'-Lz8YxHwuVBMWl0Go6C5': {first: 'foo',last: 'bar',uid: '-Lz8YxHwuVBMWl0Go6C5'},'-Lz8YxHy0S-QkDaE1PkX': {first: 'foo',last: 'bar',uid: '-Lz8YxHy0S-QkDaE1PkX'}}, attendanceData = {'-Lz8YxHiwp8QZW3TqAFn': true,'-Lz8YxHqQXWoaGOFRLrO': true,'-Lz8YxHsMItaaTVNyQRE': true,'-Lz8YxHwuVBMWl0Go6C5': false,'-Lz8YxHy0S-QkDaE1PkX': true,'-Lz8YxIFA1XGVmaNfNr3': false,'-Lz8YxIJVZnIIj7RgEzg': false}, filteredMembers = Object.entries(allMembers).reduce( (r, [k, v]) => (attendanceData[k] && (r[k] = v), r), {} ); console.log(filteredMembers);Otra documentación relevante:
Puedes usar el método reduce :
const allMembers = { "-Lz8YxHiwp8QZW3TqAFn": { "first": "foo", "last": "bar", "uid": "-Lz8YxHiwp8QZW3TqAFn" }, "-Lz8YxHqQXWoaGOFRLrO": { "first": "foo", "last": "bar", "uid": "-Lz8YxHqQXWoaGOFRLrO" }, "-Lz8YxHsMItaaTVNyQRE": { "first": "foo", "last": "bar", "uid": "-Lz8YxHsMItaaTVNyQRE" }, "-Lz8YxHwuVBMWl0Go6C5": { "first": "foo", "last": "bar", "uid": "-Lz8YxHwuVBMWl0Go6C5" }, "-Lz8YxHy0S-QkDaE1PkX": { "first": "foo", "last": "bar", "uid": "-Lz8YxHy0S-QkDaE1PkX" }, } const attendanceData = { "-Lz8YxHiwp8QZW3TqAFn": true, "-Lz8YxHqQXWoaGOFRLrO": true, "-Lz8YxHsMItaaTVNyQRE": true, "-Lz8YxHwuVBMWl0Go6C5": false, "-Lz8YxHy0S-QkDaE1PkX": true, "-Lz8YxIFA1XGVmaNfNr3": false, "-Lz8YxIJVZnIIj7RgEzg": false, } const reduced = Object.entries(allMembers).reduce((data, [key, value]) => { if (attendanceData[key] ?? false) data[key] = value; return data; }, {}); console.log(reduced);Puede combinar Object.keys() , Array.prototype.filter() y Array.prototype.reduce()
Código:
const allMembers = {'-Lz8YxHiwp8QZW3TqAFn': {first: 'foo',last: 'bar',uid: '-Lz8YxHiwp8QZW3TqAFn',},'-Lz8YxHqQXWoaGOFRLrO': {first: 'foo',last: 'bar',uid: '-Lz8YxHqQXWoaGOFRLrO',},'-Lz8YxHsMItaaTVNyQRE': {first: 'foo',last: 'bar',uid: '-Lz8YxHsMItaaTVNyQRE',},'-Lz8YxHwuVBMWl0Go6C5': {first: 'foo',last: 'bar',uid: '-Lz8YxHwuVBMWl0Go6C5',},'-Lz8YxHy0S-QkDaE1PkX': {first: 'foo',last: 'bar',uid: '-Lz8YxHy0S-QkDaE1PkX',},} const attendanceData = {'-Lz8YxHiwp8QZW3TqAFn': true,'-Lz8YxHqQXWoaGOFRLrO': true,'-Lz8YxHsMItaaTVNyQRE': true,'-Lz8YxHwuVBMWl0Go6C5': false,'-Lz8YxHy0S-QkDaE1PkX': true,'-Lz8YxIFA1XGVmaNfNr3': false,'-Lz8YxIJVZnIIj7RgEzg': false,} const result = Object .keys(allMembers) .filter((k) => attendanceData[k]) .reduce((a, k) => (a[k] = allMembers[k], a), {}) console.log(result)