我正在寻找与Python的{dict} .pop()等效的JavaScript。我看到JS有一个shift()和pop(),但这些是硬编码的数组中的第一个和最后一个位置。是否有一个等价物,我可以指定一个对象的位置?
我在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}
答案 0 :(得分:4)
不在一条指令中,但您可以获取该属性,然后使用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);

所以你可以创建一些自定义函数,一次完成这两个操作:
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);

可能有更好的写作方式,欢迎提出建议。 (例如,请参阅Martin Adámek's answer以获得导致相同python语法的良好实现)
答案 1 :(得分:3)
我认为没有这样的事情,同时请注意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);
答案 2 :(得分:3)
使用自定义功能:
function pop(obj, key) {
var val = obj[key];
delete obj[key];
return val;
}
答案 3 :(得分:0)
在 js 中执行此操作的现代方法是使用 rest 运算符(3 个点),但仍然没有更改原始对象。
let obj = {'key1': 'value1', 'key2': 'value2'}
const {key1, ...objNew} = obj;
console.log("key1", key1);
console.log("objNew", objNew);
上述代码段导致新的 objNew
对象仅包含 key2
,而新变量 key1
将包含 {{1} 的 key1
属性中包含的值} 对象。