Tengo una matriz con objeto, que necesito ordenar de tal manera que primero aparezca el objeto principal, y luego sus objetos secundarios, y así sucesivamente. Sin embargo, cuando trato de encontrar el índice de un objeto principal en la matriz para empujar el objeto secundario después de él, el método findIndex() devuelve -1. ¿Alguien puede señalar la raíz de este problema, ya que no puedo ver claramente por qué lo hace? El código y la matriz de datos que estoy usando están escritos a continuación.
const data = [ { "_id": "0", "parent": null, "title": "All" }, { "_id": "61c0a9cb8f67e811d55abb2d", "parent": null, "title": "Electronics" }, { "_id": "61c0a9cb8f67e811d55abb2e", "parent": { "_id": "61c0a9cb8f67e811d55abb2d" }, "title": "Phones" }, { "_id": "61c0a9cb8f67e811d55abb2f", "parent": { "_id": "61c0a9cb8f67e811d55abb2d" }, "title": "Laptops" }, { "_id": "61c0a9cb8f67e811d55abb30", "parent": { "_id": "61c0a9cb8f67e811d55abb2d" }, "title": "TVs" }, { "_id": "61c0a9cb8f67e811d55abb31", "parent": null, "title": "Literature" }, { "_id": "61c0a9cb8f67e811d55abb32", "parent": { "_id": "61c0a9cb8f67e811d55abb31"}, "title": "Study Literature" }, { "_id": "61c0a9cb8f67e811d55abb33", "parent": { "_id": "61c0a9cb8f67e811d55abb31" }, "title": "Fictional Literature" }, { "_id": "61c0a9cb8f67e811d55abb34", "parent": { "_id": "61c0a9cb8f67e811d55abb31" }, "title": "Comic books" }, { "_id": "61c0a9cb8f67e811d55abb35", "parent": { "_id": "61c0a9cb8f67e811d55abb2e" }, "title": "Smartphones" }, { "_id": "61c0a9cb8f67e811d55abb36", "parent": { "_id": "61c0a9cb8f67e811d55abb35" }, "title": "Accessories" } ]; let parents = []; data.forEach( element => { if( element.parent == null ) { parents.push(element); } else { let parentId = element.parent._id; let index = parents.findIndex(item => { item._id == parentId; }); console.log(index); parents.splice(index+1, 0, element); } });Usar item => {parentId == item._id;} requiere un 'retorno' para ser usado: item => {return parentId == item._id;} sin el retorno la función es básicamente item => null ; que es visto como falso por .findIndex() resultando en un -1
Si usa la función de flecha sin las llaves, se implica un retorno (pero lo limita a expresiones de una sola línea como compensación): item => parentId == item._id
Fuente: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions