【问题标题】:Delete entries from an associative array (JavaScript)从关联数组中删除条目 (JavaScript)
【发布时间】:2011-05-23 19:15:39
【问题描述】:

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

我试过这个:

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

  ...

  delete myArray['key'];

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

  [ undefined, { key1: 'value1', key2: 'value2' }, undefined,
    { key1: 'value1', key2: 'value2' }, undefined, undefined ]

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

【问题讨论】:

  • Javascript 没有关联数组。它有对象,它们是名称和值的集合,以及数组,它们是具有特殊长度属性和一些方便方法的对象。

标签: javascript associative-array


【解决方案1】:

您似乎正在混合 arraysobjects。关联数组应该用对象来实现:

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];
        }
    }
};

【讨论】:

  • “遍历数组”会产生问题...如何通过索引而不是按键获取显示的小部件的条目?关键是来自数据库的小部件的 id.. 所以 key != index.
  • +1:在 JS 中,与 PHP 不同,数组不能用作哈希映射。建议的解决方案是最好的做法,displayedWidgets 应该是一个对象(它是一个哈希映射),而不是一个数组,它仅在您需要通过整数而不是字符串索引项目时使用。
  • @FFraenz:你不能同时拥有两者(只有一个数据结构)。如果您还需要某种小部件的顺序,那么您需要另一个数组,例如添加密钥。或者,您仅将所有内容都基于索引。或者我不明白这个问题......你需要索引做什么?
  • 我想我必须研究一下这些东西。感谢您的快速帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 2023-03-19
  • 2018-09-16
  • 1970-01-01
相关资源
最近更新 更多