Estoy tratando de buscar a través de un objeto JSON para encontrar la roca mascota que quiero eliminar. Aquí hay un JSON simple en el que estoy trabajando:
misDatos.json:
{ "data": [ { "name": "John", "age": "25", "pet-rocks": [ { "name": "Travis", "age": "9" }, { "name": "Steven", "age": "5" }, { "name": "Oliver", "age": "7" } ] }, { "name": "Jane", "age": "25", "pet-rocks": [ { "name": "Jesse", "age": "4" }, { "name": "Carol", "age": "8" }, { "name": "Jake", "age": "7" } ] } ] }Me gustaría hacer una búsqueda de "Steven" y eliminar esa mascota de la lista. Aquí están las cosas que he probado:
MiJSFile.js:
const myDataObject = require('./myData.json'); for (let key in myDataObject) { let value = myDataObject[key]; if (value === "Steven") { delete myDataObject[key]; } //To see if I get the data I want console.log(key, value); }Sin embargo, mi salida es extraña y no estoy seguro de cómo llegar a ese nodo secundario de petrock. Parece que las rocas de petróleo tienen forma de objeto y no estoy seguro de cómo llegar a ellas. aquí está la salida de mi consola a continuación. Supongo que no se eliminó ya que todavía hay 3 objetos petrock en los datos.
data [ { name: 'Robert', age: '25', 'pet-rocks': [ [Object], [Object], [Object] ] }, { name: 'Robert', age: '25', 'pet-rocks': [ [Object], [Object], [Object] ] } ]¡Cualquier ayuda o sugerencia sería muy apreciada! ¡Gracias!
La roca mascota llamada Steven no es un hijo directo de myDataObject, por lo que no puede eliminarla así. Puede recorrer la matriz de "datos", reconstruyendo la matriz de "pet-rocks" para cada elemento. Un filtro simple para eliminar cualquier roca mascota llamada Steven debería funcionar.
const myDataObject = { "data": [ { "name": "John", "age": "25", "pet-rocks": [ { "name": "Travis", "age": "9" }, { "name": "Steven", "age": "5" }, { "name": "Oliver", "age": "7" } ] }, { "name": "Jane", "age": "25", "pet-rocks": [ { "name": "Jesse", "age": "4" }, { "name": "Carol", "age": "8" }, { "name": "Jake", "age": "7" } ] } ] }; myDataObject.data.forEach(d => { d["pet-rocks"] = d["pet-rocks"].filter(rock => rock.name !== "Steven"); }); console.log(myDataObject);