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)
不是在一条指令中,但您可以获取该属性,然后用于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 语法的良好实现)
我认为没有这样的事情,也请注意shift和pop是的方法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)
| 归档时间: |
|
| 查看次数: |
499 次 |
| 最近记录: |