Je recherche un équivalent JavaScript de {dict} .pop () de Python. Je vois que JS a un shift () et pop (), mais ceux-ci sont codés en dur pour les première et dernière positions dans un tableau. Existe-t-il un équivalent où je peux spécifier la position d'un objet?

Exemple de ce que je peux faire en Python:

>>> foxx = {'player':{'name':'Jimmie','last':'Foxx','number':3}, 'date':'2018-01-01', 'homeruns':3,'hits':4}
>>> player = foxx.pop('player')
>>> foxx
{'date': '2018-01-01', 'homeruns': 3, 'hits': 4}
>>> player
{'name': 'Jimmie', 'last': 'Foxx', 'number': 3}
6
jsamsf 16 avril 2018 à 02:32

3 réponses

Meilleure réponse

Pas dans une instruction, mais vous pouvez obtenir la propriété, puis utiliser delete pour supprimer la propriété d'un objet.

let foxx = {'player':{'name':'Jimmie','last':'Foxx','number':3}, 'date':'2018-01-01', 'homeruns':3,'hits':4};

let player = foxx.player;
delete foxx.player;

console.log(foxx);
console.log(player);

Vous pouvez donc créer une fonction personnalisée qui effectue ces deux opérations en une seule fois:

function pop(object, propertyName) {
    let temp = object[propertyName];
    delete object[propertyName];
    return temp;
}

let myObj = { property1 : 'prop1', property2: 'prop2' };

let test = pop(myObj, 'property1');

console.log(myObj);
console.log(test);

Il y a probablement une meilleure façon d'écrire ceci, les suggestions sont les bienvenues. (par exemple, voir la réponse de Martin Adámek pour une implémentation agréable menant à la même syntaxe python)

4
Pac0 16 avril 2018 à 00:14

Je ne pense pas qu'il y ait une telle chose, notez également que shift et pop sont des méthodes de array, pas d'un object.

Mais vous pouvez facilement le remplir vous-même:

Object.defineProperty(Object.prototype, 'pop', {
  enumerable: false,
  configurable: true,
  writable: false,
  value: function (key) {
    const ret = this[key];
    delete this[key];
  
    return ret;
  }
});

var foxx = {'player':{'name':'Jimmie','last':'Foxx','number':3}, 'date':'2018-01-01', 'homeruns':3,'hits':4}
var player = foxx.pop('player')
console.log(foxx, player);
5
Martin Adámek 15 avril 2018 à 23:44

Avec une fonction personnalisée:

function pop(obj, key) {
    var val = obj[key];
    delete obj[key];
    return val;
}
3
ankabout 15 avril 2018 à 23:45