从关联数组中删除条目(JavaScript)

ffr*_*enz 2 javascript associative-array

我目前在从JS中的关联数组中删除条目时遇到问题.

我试过这个:

  myArray['key'] = value;
  myArray['key1'] = value1;

  ...

  delete myArray['key'];
Run Code Online (Sandbox Code Playgroud)

但我在我的申请中得到以下结果:

  [ undefined, { key1: 'value1', key2: 'value2' }, undefined,
    { key1: 'value1', key2: 'value2' }, undefined, undefined ]
Run Code Online (Sandbox Code Playgroud)

如何删除整个条目,键和值?我发现方法splice()但我认为它使用不同的索引.我无法通过将密钥传递给splice()来删除我想要的条目.

Fel*_*ing 9

看来你正在混合数组对象.关联数组应该用对象实现:

myArray = {};
myArray['key'] = value;
myArray['key1'] = value1;
Run Code Online (Sandbox Code Playgroud)

这有点令人困惑,因为在您的输出中,对象不再具有key(因此它有效),但包含这些对象的数组为未定义的值.我看不出delete myArray['key'];你的输出是如何 相关的,哪个变量现在包含哪个值(请澄清).

但看起来你做了类似的事情:

var container = new Array(6);
container[1] = myArray;
container[3] = myArray;
Run Code Online (Sandbox Code Playgroud)

这将使用6个undefined值(排序)初始化数组,然后将第二个和第四个值设置为其他值.

如果要将"数组"用作关联数组,则应将其声明为对象:

var container = {};
Run Code Online (Sandbox Code Playgroud)

如果您需要更好的答案,请发布更多代码.

更新:是的,您应该声明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];
        }
    }
};
Run Code Online (Sandbox Code Playgroud)