Estoy escribiendo un código JS en el que quiero eliminar una clave específica de JSON Array y mi código es el siguiente.
var obj = [ { XXX: "2", YYY: "3", ZZZ: "4" }, { XXX: "5", YYY: "6", ZZZ: "7" }, { XXX: "1", YYY: "2", ZZZ: "3" } ]; for (var i = 0; i < obj.length; i++) { delete obj[i].YYY } /*obj=obj.forEach(item =>{ return delete item.YYYY});*/ console.log(obj); Este código funciona bien y me está dando el resultado esperado, pero cuando trato de ejecutarlo usando forEach (líneas comentadas), me muestra indefinido.
¿Dónde me estoy equivocando?
Simplemente elimine el obj = parte de su código. forEach siempre devuelve undefined . Dado que está modificando los objetos en su matriz y desea replicar el ciclo for , forEach está bien, simplemente no reasignar (y no es necesario return en la devolución de llamada):
obj.forEach(item => { delete item.YYY; });Ejemplo en vivo:
var obj = [ { XXX: "2", YYY: "3", ZZZ: "4" }, { XXX: "5", YYY: "6", ZZZ: "7" }, { XXX: "1", YYY: "2", ZZZ: "3" } ]; obj.forEach(item => { delete item.YYY; }); console.log(obj); (Eliminé el error tipográfico del código forEach , tenías una Y adicional).
Dicho esto, no hay nada de malo con un bucle for , o podrías usar un bucle for-of :
for (const item of obj delete item.YYY; }Ejemplo en vivo:
var obj = [ { XXX: "2", YYY: "3", ZZZ: "4" }, { XXX: "5", YYY: "6", ZZZ: "7" }, { XXX: "1", YYY: "2", ZZZ: "3" } ]; for (const item of obj delete item.YYY; } console.log(obj); Otra alternativa es crear una nueva matriz con nuevos objetos que no tengan YYY , a través del map y quizás con desestructuración:
obj = obj.map(({YYY, ...rest}) => rest);Ejemplo en vivo:
let obj = [ { XXX: "2", YYY: "3", ZZZ: "4" }, { XXX: "5", YYY: "6", ZZZ: "7" }, { XXX: "1", YYY: "2", ZZZ: "3" } ]; obj = obj.map(({YYY, ...rest}) => rest); console.log(obj);forEach no devuelve un valor.
var obj = [{ XXX: "2", YYY: "3", ZZZ: "4" }, { XXX: "5", YYY: "6", ZZZ: "7" }, { XXX: "1", YYY: "2", ZZZ: "3" } ]; obj.forEach(item => delete item.YYY); console.log(obj); Si no desea mutar la matriz original, puede usar Array.map :
var obj = [{ XXX: "2", YYY: "3", ZZZ: "4" }, { XXX: "5", YYY: "6", ZZZ: "7" }, { XXX: "1", YYY: "2", ZZZ: "3" } ]; obj = obj.map(item => (delete item.YYY, item)); console.log(obj);El valor de valor de Return value de Array.prototype.forEach() no está undefined , el objeto real se modifica. Además, puede acortar su código eliminando las llaves ( {...} ) y return la palabra clave:
var obj = [ { XXX: "2", YYY: "3", ZZZ: "4" }, { XXX: "5", YYY: "6", ZZZ: "7" }, { XXX: "1", YYY: "2", ZZZ: "3" } ]; obj.forEach(item => delete item.YYY); console.log(obj);