如何在JS中执行以下操作?我想模仿.pop()
对象而不是数组。
var deck = {
'cardK' :'13',
'cardQ' :'12',
'cardAJ':'11'
};
var val = deck.pop();
console.log("Key" + val.key );
console.log("Value" + val.val );
似乎不可能。
答案 0 :(得分:17)
.pop
仅适用于阵列。在JavaScript中,对象(基本上是关联数组)不像数组那样排序,因此没有.pop
方法。
您可以使用数组:
var deck = [
{ key: 'cardK', val: 13 },
{ key: 'cardQ', val: 12 },
{ key: 'cardAJ', val: 11 },
];
var val = deck.pop();
console.log('key: ' + val.key);
console.log('aa: ' + val.val);
答案 1 :(得分:4)
正如其他答案所建议的,这里最好的解决方案可能是使用一组对象。但是,您也可以创建自己的pop函数,从对象中删除键,例如:
function pop(obj) {
var key = Object.keys(obj).pop();
var result = {key: key, val: obj[key]};
delete obj[key];
return result;
}
var val = pop(deck);
您可以向pop
添加类似的Object.prototype
功能,以便您可以执行deck.pop()
,但我强烈建议不要使用此类设计。
答案 2 :(得分:3)
你是对的,这是不可能的。将对象视为地图或哈希表,而不是“关联数组”。属性没有顺序,因此诸如.pop
之类的方法没有意义(除非它会删除随机属性,如Python的字典)。
如果您想使用.pop
和val.key
以及val.val
,则必须创建一个对象数组:
var deck = [
{key: 'cardK', val: '13'},
{key: 'cardQ', val: '12'},
{key: 'cardAJ', val: '11'}
];
答案 3 :(得分:1)
我相信您知道,.pop
是一种原型Array
方法,因此您无法将其与Javascript对象一起使用。
在数组上调用.pop
将从数组中删除 last 元素。但是,没有与对象的“最后”键值对,因为它们的顺序无法保证。尽管如此,如果你不关心顺序,你可以实现一个类似.pop
的函数用于对象,但同样,它不会删除并返回最终的键值对。
这样的事情可以解决问题:
function pop(obj) {
for (var key in obj) {
var val = obj[key];
delete obj[key];
return {
'key' : key,
'val' : val,
};
};
};
结合您的代码:
var val = pop(deck);
console.log('key: ' + val.key);
console.log('aa: ' + val.val);
答案 4 :(得分:1)
使用此结构(可以将其视为关联数组)时,需要使用不同的技术。像pop(),slice()甚至.length这样的东西不会像使用数字键控数组那样工作。
我在搜索需要快速发生的键/值对时使用字符串键控对象数组。
这是我刚创建的一个jsPef,它显示了数组结构的好处:
http://jsperf.com/bmcgin-object-array-tests(请记住,随着阵列变大,性能会上升)
还要记住,值可以是数字,字符串,数组,函数,对象等...