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
3 respuestas
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));
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);
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 ))
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.