Tengo la siguiente matriz:
let x = [ { name: "Bad", value: 2 }, { name: "Critical", value: 1 }, { name: "High", value: 5 }, { name: "Medium", value: 5 }, ]; La expectativa es buscar "Critical" primero, si la matriz lo tiene, devuélvalo, de lo contrario busque "High" , luego busque "Medium" y así sucesivamente.
Puede almacenar las prioridades en una matriz y luego recorrer la matriz y, para cada prioridad, verificar si hay un objeto y cada vez que se encuentre un objeto, devolverlo. Si toda la matriz de priorities está agotada, devuelva null ( o lo que quiera ).
const arr = [ { name: "Bad", value: 2 }, { name: "Critical", value: 1 }, { name: "High", value: 5 }, { name: "Medium", value: 5 }, ], priorities = ["Critical", "High", "Medium", "Bad"], search = (arr, priorities) => { for (let p of priorities) { const obj = arr.find(({ name }) => name === p); if (obj) { return obj; } } return null; }; console.log(search(arr, priorities));También puede ordenar la matriz según la prioridad.
Map que almacene las prioridades.arr según las prioridades almacenadas en el mapa. const arr = [ { name: "Bad", value: 2 }, { name: "Critical", value: 1 }, { name: "High", value: 5 }, { name: "Medium", value: 5 }, ], priorities = new Map([ ["Critical", 4], ["High", 3], ["Medium", 2], ["Bad", 1], ]), sortedArr = [...arr].sort( (a, b) => priorities.get(b.name) - priorities.get(a.name) ); console.log(sortedArr);Esto iterará sobre la matriz una vez hasta que encuentre el valor más alto y romperá el ciclo una vez que encuentre ese valor. El número máximo de iteraciones es N, donde N es x.longitud;
let x = [{name: 'Bad',value: 2}, {name: 'Critical', value: 1}, {name: 'High', value: 5}, {name: 'Medium', value: 5}] function findVal(arr) { let returnVal = null; for (let i = 0; i < arr.length && returnVal === null; i++) { switch (arr[i].name) { case 'Critical': returnVal = arr[i]; break; case 'High': returnVal = arr[i]; break; case 'Medium': returnVal = arr[i]; break; case 'Low': returnVal = arr[i]; break; default: break; } } return returnVal; } findVal(x);Nota : Sería mucho más simple designar un valor numérico para los valores de la matriz para poder determinar la gravedad simplemente usando el valor más alto/más bajo en lugar de la coincidencia de cadenas.
let value = x.find(x => x.name == "Critical") || x.find(x => x.name == "High") || x.find(x => x.name == "Medium") ...