Considere esta array :
const arr = [ {order: 1, mess:"test1"}, {order: 2, mess:"test2"}, {order: 2, mess:"test2"}, {order: 2, mess:"test2"}, {order: 3, mess:"test3"}, {order: 4, mess:"test4"}, ] arr siempre se ordena por order .
Quiero modificarlo para obtener:
const arr = [ {order: 1, mess:"test1"}, {order: 2, mess:"test2", sep:true}, {order: 2, mess:"test2"}, {order: 2, mess:"test2"}, {order: 3, mess:"test3", sep:true}, {order: 4, mess:"test4", sep:true}, ] sep debe insertarse en un objeto si tiene un order diferente al del objeto anterior.
No puedo escribir esta función, aunque sea bastante simple (¡supongo!).
En este momento, tengo esto, pero no funciona en absoluto y no entiendo su comportamiento.
const arr = [ {order: 1, mess: "test1"}, {order: 2, mess: "test2"}, {order: 2, mess: "test2"}, {order: 2, mess: "test2"}, {order: 3, mess: "test3"}, {order: 4, mess: "test4"}, ] arr.forEach(function(value, i) { i = Number(i) const y = i + 1 if (arr[i] !== undefined && arr[y] !== undefined) { if (arr[i].order === arr[y].order) arr[y].sep = true; } }); console.log(arr)¿Tienes alguna idea? Gracias
Puede asignar una nueva matriz y verificar el elemento y el predecesor.
const data = [{ order: 1, mess: "test1" }, { order: 2, mess: "test2" }, { order: 2, mess: "test2" }, { order: 2, mess: "test2" }, { order: 3, mess: "test3" }, { order: 4, mess: "test4" }], result = data.map((o, i, a) => i && a[i - 1].order !== o.order ? { ...o, sep: true } : o ); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }Prueba esto
const arr = [ {order: 1, mess: "test1"}, {order: 2, mess: "test2"}, {order: 2, mess: "test2"}, {order: 2, mess: "test2"}, {order: 3, mess: "test3"}, {order: 4, mess: "test4"}, ] arr.forEach((obj,index)=>{ if(index>0 && obj.order != arr[index-1]['order']){ arr[index]['sep']=true } }); console.log(arr)Cambio más simple de matriz existente
const arr = [{ order: 1, mess: "test1" }, { order: 2, mess: "test2" }, { order: 2, mess: "test2" }, { order: 2, mess: "test2" }, { order: 3, mess: "test3" }, { order: 4, mess: "test4" }]; arr.forEach((value, i) => { if (i && arr[i-1].order !== arr[i].order) arr[i].sep = true; }); console.log(arr)