Tengo una matriz de objetos con diferentes claves. Quiero mover los objetos a la parte superior según la clave que quiero.
Matriz dada basada en el estado: "Activo" Quiero que todos los objetos coincidentes se muevan hacia arriba
[ {name: "abc", age: "20", status: "Active"}, {name: "xyz", age: "21", status: "Inactive"}, {name: "pqr", age: "22", status: "Active"} ]Rendimiento esperado:
[ {name: "abc", age: "20", status: "Active"}, {name: "pqr", age: "22", status: "Active"}, {name: "xyz", age: "21", status: "Inactive"} ] let list = [{ name: "abc", age: "20", status: "Active" }, { name: "xyz", age: "21", status: "Inactive" }, { name: "pqr", age: "22", status: "Active" }] list.sort((a, b) => (a.status !== "Active") ? 1 : -1) console.log(list)Produce la siguiente salida
[ { name: 'pqr', age: '22', status: 'Active' }, { name: 'abc', age: '20', status: 'Active' }, { name: 'xyz', age: '21', status: 'Inactive' } ]Las matrices tienen el método Array.sort donde puede pasar la función que devuelve 1, -1 or 0 que corresponde a cómo mover el elemento de una matriz
const arr = [{ name: "abc", age: "20", status: "Active" }, { name: "xyz", age: "21", status: "Inactive" }, { name: "pqr", age: "22", status: "Active" }] console.log(arr.sort((a, b) => (a.status === b.status) ? 0 : a.status === "Active" ? -1 : 1))puedes cambiar tu código así.
function handleData(arr, status) { if(!arr || arr.length == 0) return for(let i=0; i<arr.length; i++) { let item = arr[i]; if(item.status == status) { arr.splice(i, 1); arr.unshift(item) } } } let arr = [{name: "abc", age: "20", status: "Active"}, {name: "xyz", age: "21", status: "Inactive"}, {name: "pqr", age: "22", status: "Active"}] handleData(arr, 'Active')