Supprimer les attributs vides d'un objet en Javascript
Lorsque vous travaillez avec des objets JavaScript, il peut être nécessaire de supprimer les attributs non définis ou nuls . Cela peut aider à nettoyer les données, à supprimer les champs inutiles ou à préparer les objets pour le stockage. Il existe plusieurs façons d'accomplir cette tâche en fonction de la version de JavaScript utilisée.
ES10/ES2019
Dans ES10/ES2019, l'approche la plus simple consiste à utiliser la méthode Object.fromEntries() pour créer un nouvel objet contenant uniquement les attributs non vides :
let o = Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null));
Ceci peut également s'écrire sous forme de fonction :
function removeEmpty(obj) { return Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null)); }
Pour les objets imbriqués, une fonction récursive peut être utilisée :
function removeEmpty(obj) { return Object.fromEntries( Object.entries(obj) .filter(([_, v]) => v != null) .map(([k, v]) => [k, v === Object(v) ? removeEmpty(v) : v]) ); }
ES6/ES2015
Dans ES6/ES2015, le one-liner suivant peut être utilisé, mais notez qu'il mute l'objet d'origine plutôt que de créer un nouveau one :
Object.keys(obj).forEach((k) => obj[k] == null && delete obj[k]);
Alternativement, la déclaration unique suivante créera un nouvel objet sans muter l'original :
let o = Object.keys(obj) .filter((k) => obj[k] != null) .reduce((a, k) => ({ ...a, [k]: obj[k] }), {});
Cela peut également être écrit sous forme de fonction :
function removeEmpty(obj) { return Object.entries(obj) .filter(([_, v]) => v != null) .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}); }
Pour les objets imbriqués, la fonction récursive suivante peut être utilisé :
function removeEmpty(obj) { return Object.entries(obj) .filter(([_, v]) => v != null) .reduce( (acc, [k, v]) => ({ ...acc, [k]: v === Object(v) ? removeEmpty(v) : v }), {} ); }
ES5/ES2009
Dans ES5/ES2009, le code est plus verbeux :
function removeEmpty(obj) { return Object.keys(obj) .filter(function (k) { return obj[k] != null; }) .reduce(function (acc, k) { acc[k] = obj[k]; return acc; }, {}); }
Cela peut s'écrire dans un style impératif également :
function removeEmpty(obj) { const newObj = {}; Object.keys(obj).forEach(function (k) { if (obj[k] && typeof obj[k] === "object") { newObj[k] = removeEmpty(obj[k]); } else if (obj[k] != null) { newObj[k] = obj[k]; } }); return newObj; }
Enfin, une version récursive écrite dans un style fonctionnel :
function removeEmpty(obj) { return Object.keys(obj) .filter(function (k) { return obj[k] != null; }) .reduce(function (acc, k) { acc[k] = typeof obj[k] === "object" ? removeEmpty(obj[k]) : obj[k]; return acc; }, {}); }
En appliquant ces techniques, vous pouvez supprimer efficacement les attributs vides d'un objet dans différentes versions de JavaScript, garantissant ainsi que vos données sont propres et prêtes pour un traitement ou un stockage ultérieur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!