Para objeto de mapa hash:
messages = {
3: {
id: 3,
user_id: 1,
text: "My message"
},
345: {
id:345,
user_id: 2,
text: "Hello There!"
},
...
}
Y en la plantilla, estoy tratando de agregar diferentes estilos si los mensajes siguientes y anteriores tienen diferentes remitentes ( user_id ). Dado que esto no es una matriz, no puedo hacer:
messages[index + 1] or messages[index - 1]
Necesitaría la identificación exacta del mensaje siguiente y/o anterior.
Podría tomar una solución ineficaz convirtiendo el objeto de mensajes en una matriz, encontrando el índice de la identificación del mensaje actual y comparando las identificaciones de los remitentes del mensaje siguiente y anterior. Pero parece que hay una mejor solución, específicamente porque vue v-for
ya tiene un "índice" expuesto.
¿Hay mejor enfoque para este problema? Suponiendo que no estoy creando variables adicionales que rastreen las identificaciones (esto solo aumenta la complejidad).
Puede acceder así, niño siendo el objeto secundario
<p v-for="(child, key, index) in obj" :key="index">{{child.id}},{{key}},{{index}}</p>
Object.keys()
Obtiene una matriz de claves en el mismo orden que la iteración del objeto. La clave de la iteración anterior se puede encontrar en cada iteración encontrando la posición de la clave en esta matriz. Accede al valor anterior con todo el objeto y la clave anterior.
Es mejor convertir a una matriz. Por un lado, las propiedades de los objetos ordinarios en realidad no están ordenadas, y el orden en el que se recorren los objetos a menudo depende de la implementación de métodos de recorrido específicos por parte de diferentes motores JS del navegador. Entonces es fácil que el navegador del usuario varíe y, por lo tanto, no cumpla con las expectativas (aunque es posible que no tenga problemas con esto si la clave en su objeto es de tipo Número). Por otro lado, en este escenario de visualización secuencial, las matrices son más semánticas que los objetos normales y, en realidad, son más elegantes.
Si su preocupación es sobre el rendimiento, el front-end rara vez necesita pensar tanto en ello.
Así que conviértalo en una matriz, tal vez la mejor.
------Editar------
Pedir a los ingenieros de back-end que devuelvan una matriz directamente puede ser mejor que 'mejor'.