是否有一个与dict上的python pop()等效的JavaScript对象?

jsa*_*msf 5 javascript python ecmascript-6

我正在寻找与Python的{dict} .pop()等效的JavaScript。我看到JS具有shift()和pop(),但是它们被硬编码为Array中的第一个和最后一个位置。是否可以在其中指定对象位置的等效项?

我可以在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}
Run Code Online (Sandbox Code Playgroud)

Pac*_*ac0 6

不是在一条指令中,但您可以获取该属性,然后用于delete从对象中删除该属性。

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);
Run Code Online (Sandbox Code Playgroud)

因此,您可以创建一些自定义函数,一次性完成这两个操作:

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);
Run Code Online (Sandbox Code Playgroud)

可能有更好的写法,欢迎提出建议。(例如,请参阅Martin Adámek 的答案,以了解导致相同 Python 语法的良好实现)


Mar*_*mek 5

我认为没有这样的事情,也请注意shiftpop是的方法array,而不是的方法object

但是您可以轻松地自己填充它:

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);
Run Code Online (Sandbox Code Playgroud)