Tengo una demostración de CodePen en funcionamiento aquí: https://codepen.io/JosephAllen/pen/vYmQpWL?editors=0010
Esta demostración:
Hay un campo de entrada para buscar y filtrar la lista, pero filtrar la matriz crea un nuevo índice para cada usuario, lo que arruina toda la idea de una clasificación.
¿Cómo puedo mantener la función de clasificación y búsqueda sin crear nuevos índices para los usuarios?
Si yo fuera el autor de la API, solo incluiría el rango como una propiedad, pero no lo soy.
Mi función de búsqueda:
getUsers() { fetch(`https://trafficthinktank.com/wp-json/mjtw/v1/community`) .then((res) => res.json()) .then((data) => { this.isLoading = false; this.users = data.sort((a, b) => b.points - a.points); // this.users = this.users.map(user => ({ visible: true, ...user })); console.log(this.users); }); 0; }Mi función de filtro:
get filteredUsers() { if (this.search === "") { return this.users; } return this.users.filter((item) => { return item.name.toLowerCase().includes(this.search.toLowerCase()); }); }Los índices no pueden permanecer constantes ya que no puede haber una matriz con un número faltante en su secuencia de índice. Sin embargo, simplemente puede mapear su matriz y mantener los índices dentro. Mira esto, te puede ser útil:
getUsers() { fetch(`https://trafficthinktank.com/wp-json/mjtw/v1/community`) .then((res) => res.json()) .then((data) => { this.isLoading = false; this.users = data.sort((a, b) => b.points - a.points); // this.users = this.users.map(user => ({ visible: true, ...user })); this.users = this.users.map((entity, index) => ({index, entity})); console.log(this.users); }); 0; }y luego puedes filtrar así
get filteredUsers() { if (this.search === "") { return this.users; } return this.users.filter((item) => { return item.entity.name.toLowerCase().includes(this.search.toLowerCase()); }); }