在dicts上是否有一个等同于python' pop()的javascript对象?

时间:2018-04-15 23:32:05

标签: javascript python ecmascript-6

我正在寻找与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}

4 个答案:

答案 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)

我认为没有这样的事情,同时请注意shiftpoparray的方法,而不是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 属性中包含的值} 对象。