Soy muy nuevo en javascript y me pregunto cómo podemos eliminar los valores nulos del objeto javascript sin alterar su estructura.
[ { "name": [ "Chris" ], "data": [ [ 1293733800000, 2041.8391 ], null, [ 1301509800000, 891.194800000001 ], null, [ 1309372200000, 1040.9923 ] ] }, { "name": "Mike", "data": [ null, [ 1301509800000, 4465 ], null, [ 1309372200000, 4538 ], null, [ 1317321000000, 3700 ], null ] } ]Salida deseada:
[ { "name": [ "Chris" ], "data": [ [ 1293733800000, 2041.8391 ], [ 1301509800000, 891.194800000001 ], [ 1309372200000, 1040.9923 ] ] }, { "name": "Mike", "data": [ [ 1301509800000, 4465 ], [ 1309372200000, 4538 ], [ 1317321000000, 3700 ] ] } ]He probado esta función pero está alterando la estructura del objeto al agregar un índice alternativamente en cada sección: -
function removeEmpty(obj) { return Object.fromEntries( Object.entries(obj) .filter(([_, v]) => v != null) .map(([k, v]) => [k, v === Object(v) ? removeEmpty(v) : v]) ); }Puedes probar esto:
const data = [{ "name": [ "Chris" ], "data": [ [ 1293733800000, 2041.8391 ], null, [ 1301509800000, 891.194800000001 ], null, [ 1309372200000, 1040.9923 ] ] }, { "name": "Mike", "data": [ null, [ 1301509800000, 4465 ], null, [ 1309372200000, 4538 ], null, [ 1317321000000, 3700 ], null ] } ] const withOutNull = data.map(data => ({ ...data, data: data.data.filter(data => data !== null) })) console.dir(withOutNull)Puede verificar los valores del objeto y filtrar solo el primer nivel de las matrices encontradas.
const data = [{ name: ["Chris"], data: [[1293733800000, 2041.8391], null, [1301509800000, 891.194800000001], null, [1309372200000, 1040.9923]] }, { name: "Mike", data: [null, [1301509800000, 4465], null, [1309372200000, 4538], null, [1317321000000, 3700], null] }], result = data.map(o => Object.fromEntries(Object .entries(o) .map(([k, v]) => [k, Array.isArray(v) ? v.filter(e => e !== null) : v ]) )); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }Suponiendo que su matriz original se llame datos, simplemente puede hacer
const data2 = data.map(x => { x.data = x.data.filter(y => y != null) return x; })