我目前在从JS中的关联数组中删除条目时遇到问题。
我试过了:
myArray['key'] = value;
myArray['key1'] = value1;
...
delete myArray['key'];
但我在申请中得到以下结果:
[ undefined, { key1: 'value1', key2: 'value2' }, undefined,
{ key1: 'value1', key2: 'value2' }, undefined, undefined ]
如何删除整个条目,键和值?我找到了方法 splice(),但我认为它使用了不同的索引。我无法通过将密钥传递给splice()来删除我想要的条目。
答案 0 :(得分:9)
您似乎正在混合数组和对象。关联数组应该用对象来实现:
myArray = {};
myArray['key'] = value;
myArray['key1'] = value1;
这有点令人困惑,因为在你的输出中,对象不再有key
(所以它有效),但包含这些对象的数组是未定义的值。我看不出怎么样
delete myArray['key'];
与您的输出相关,哪个变量现在包含哪个值(请澄清)。
但看起来你做了类似的事情:
var container = new Array(6);
container[1] = myArray;
container[3] = myArray;
这将使用6个undefined
值(排序)初始化数组,然后将第二个和第四个值设置为其他值。
如果要将“数组”用作关联数组,则应将其声明为对象:
var container = {};
如果您需要更好的答案,请发布更多代码。
更新:是的,您应该将displayedWidgets
声明为对象:
var widgets = {
displayedWidgets: {},
clear: function() {
this.displayedWidgets = {};
},
add: function(widget) {
this.displayedWidgets[widget.id] = widget;
},
addArray: function(newWidgets) {
// note that `each` is only available in newer browsers,
// just loop over the array
for(var i = newWidgets.length; i--; ) {
this.add(newWidgets[i]);
}
},
remove: function(widgetId) {
if (widgetId in this.displayedWidgets) {
delete this.displayedWidgets[widgetId];
}
}
};