Estoy tratando de entender cómo obtener de una matriz de objetos 2 claves específicas y compararlas con otros 2 valores para una declaración booleana.
Lo que debo lograr es que para todos los resultados de una matriz de objetos, debo verificar si ownerId de propietario o el tipo de ownerType son iguales al ejemplo this.ownerId o this.ownerType .
Para dar un ejemplo, tengo un resultado Obj como
const results = [ { ownerId: '1' ownerType: SOME_TYPE, id: 1 ... <other key_values> ... }, { ownerId: '1' ownerType: SOME_TYPE, id: 2 ... <other key_values> ... }, ... more ... ]; De los resultados, tengo que extraer todos los ownerId de propietario y ownerType y verificar si todos son iguales a otro valor como ejemplo
(ownerType === 'USER' && ownerId === userId) || (ownerType === 'PARTICIPANT' && ownerId === participantId) Entonces eso significa que all ownerType === 'USER' && all ownerId === to this userId son verdaderos.
como todos los ownerId de propietario en mis ejemplos son 1 y suponemos 'USUARIO' como un tipo, entonces eso es cierto.
pero
Si el resultado no tiene el mismo ownerId de propietario, es falso.
No estoy seguro de qué tipo de función necesito escribir para ello.
Si hay algún comentario, intentaré explicar mejor el problema.
Simplemente recorra todos los elementos y verifíquelos 1 por 1, cuando encuentre un elemento que no pase, configure el resultado booleano en falso y detenga el ciclo. Cuando pasa por todos los elementos sin establecer el booleano en falso, todo pasó.
let resultBoolean = true; const userId = '5'; for (let i = 0; i < results.length; i++) { //loop through all the array items if (results[i].ownerId !== userId || results[i].ownerType !== "USER") { //check if this item doesn't have the specified requirements resultBoolean = false; //if it doesn't you know that not all items have the correct ownerId & ownerType break; //no need to continue looking because we already know its false } }Si entiendo correctamente, es posible que desee utilizar el método de filter aquí
const concernedUsers = results.filter((user) => { // Fail if there's no ownerType or userId if (!user.ownerType || !user.userId) return false; // Check for USER/PARTICIPANT type and userId/ownerId return ['USER', 'PARTICIPANT'].indexOf(user.ownerType) > -1 && ownerID === user.userId; }); concernedUsers.map((user) => { /*do something*/ });