6 votes

Suppression d'une propriété imbriquée dans un objet javascript

J'ai un objet JS comme ceci :

var tenants = {
    'first': {
        'name': 'first',
        'expired': 1
    },
    'second': {
        'name': 'second'
    }
}

Et j'aimerais supprimer la propriété "expiré" du locataire "premier", dois-je simplement le faire ?

delete tenants['first']['expired'];

Note : cette question est plus spécifique que la question : Comment supprimer une propriété d'un objet JavaScript ? En effet, ma question porte sur la partie "imbriquée".

7voto

Meligy Points 10138

Oui, cela fonctionnerait.

delete tenants['first']['expired']; o delete tenants.first.expired; .

Si vous le supprimez uniquement parce que vous vouliez l'exclure de la base de données des JSON.stringify() Vous pouvez également le définir comme suit undefined , comme tenants['first']['expired'] = undefined;

4voto

Dónal Points 61837

Si la propriété que vous souhaitez supprimer est stockée dans une chaîne de caractères, vous pouvez utiliser cette fonction

function deletePropertyPath (obj, path) {

  if (!obj || !path) {
    return;
  }

  if (typeof path === 'string') {
    path = path.split('.');
  }

  for (var i = 0; i < path.length - 1; i++) {

    obj = obj[path[i]];

    if (typeof obj === 'undefined') {
      return;
    }
  }

  delete obj[path.pop()];
};

Exemple d'utilisation

var tenants = {
    'first': {
        'name': 'first',
        'expired': 1
    },
    'second': {
        'name': 'second'
    }
}

var property = 'first.expired';    
deletePropertyPath(tenants, property);

1voto

Deepak Grover Points 31

Si vous avez le chemin de la clé séparé par des . dire first.expired dans votre cas, vous pouvez faire deleteKey(tenants, 'first.expired') :

const deleteKey = (obj, path) => {
    const _obj = JSON.parse(JSON.stringify(obj));
    const keys = path.split('.');

    keys.reduce((acc, key, index) => {
        if (index === keys.length - 1) {
            delete acc[key];
            return true;
        }
        return acc[key];
    }, _obj);

    return _obj;
}

let tenants = {
    'first': {
        'name': 'first',
        'expired': 1
    },
    'second': {
        'name': 'second'
    }
};

const PATH_TO_DELETE = 'first.expired';

tenants = deleteKey(tenants, PATH_TO_DELETE);
console.log('DELETE SUCCESSFUL:', tenants);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X