Tengo 2 lista de la siguiente manera:

   const allusers = [
      { id: 11, name: 'Adam', age: 23, group: 'editor' },
       { id: 47, name: 'John', age: 28, group: 'admin' },
       { id: 85, name: 'William', age: 34, group: 'editor' },
       { id: 97, name: 'Oliver', age: 28, group: 'admin' }
     ];


    const user = [
       { id: 11, name: 'Adam', age: 23, group: 'editor' },
       { id: 97, name: 'Oliver', age: 28, group: 'admin' }
     ];

Estoy tratando de usar grep, filtro en javascript para devolver los valores en todos los usuarios que no están en el usuario. ¿Cómo puedo hacer esto sin usar for loops?

Gracias

0
Mel 31 oct. 2019 a las 04:15

3 respuestas

La mejor respuesta

Dependiendo de si la propiedad está configurada o no, si es dinámica, entonces tendría que repetir la clave / valor. De otra manera:

console.log(allusers.filter(a => user.findIndex(u => u.id === a.id && u.name === a.name && u.age === a.age && u.group === a.group) < 0));
1
Glen K 31 oct. 2019 a las 01:19

Recomendaría convertir su matriz user en una Set de ID y luego ejecutar un filtro en allusers. El Set es importante porque logra la eficiencia de la tabla hash - O (1) - para cada iteración de filtrado. Esto será mucho más rápido a medida que escala, de lo contrario, está haciendo un bucle dentro de un bucle.

const allusers = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 47, name: 'John', age: 28, group: 'admin' },
  { id: 85, name: 'William', age: 34, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: 'admin' }
];


const user = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: 'admin' }
];

// Set for efficiency
const userSet = new Set(user.map(el => el.id));

const filtered = allusers.filter(user => !userSet.has(user.id));

console.log(filtered);
0
Nick 31 oct. 2019 a las 01:26

Puede usar la función filter y la función some para eso:

const users = allusers.filter(au => user.some(u => /* here is your condition */ u.id === au.id ))
0
hiral2 31 oct. 2019 a las 01:26