【问题标题】:Removing every instance of a key from Javascript Object从 Javascript 对象中删除键的每个实例
【发布时间】:2012-11-23 09:57:50
【问题描述】:

谁能解释一下我到底做错了什么:

我有以下代码:

    console.log(table);
$.each(datatableFields, function (a, b) {
    if ($.inArray(b.substring(0, 3), neededFields) == -1) {
        console.log('deleting ' + b);
        delete table[b];
    }
});
console.log(table);

我想要达到的目标应该很简单:

我有一个 Javascript 对象,我想“剥离”并删除所有不必要的字段。

“neededFields”数组简单包含我希望保留的字段列表,该数组中没有的任何内容都将从主对象中删除。

运行上面的代码,我可以确认逻辑工作正常,并且确实 Firebug 向我展示了“删除###”完美地删除了主对象中的任何字段,而不是“neededFields”中的任何字段。

但是……

我的“删除表[b]”命令似乎没有按预期工作,因为两个“console.log(table)”返回相同的结果!

有什么想法吗?

例如,如果我有以下对象:

{ABC:123, CDE:456, FGH:789, IJK:012, LMN:345},

{ABC:123, CDE:456, FGH:789, IJK:012, LMN:345},

{ABC:123, CDE:456, FGH:789, IJK:012, LMN:345},

{ABC:123, CDE:456, FGH:789, IJK:012, LMN:345},

{ABC:123, CDE:456, FGH:789, IJK:012, LMN:345},

{ABC:123, CDE:456, FGH:789, IJK:012, LMN:345},

{ABC:123, CDE:456, FGH:789, IJK:012, LMN:345} (等等……)

删除某些键(比如 IJK 和 ABC),我的最终结果是:

{CDE:456, FGH:789, LMN:345},

{CDE:456, FGH:789, LMN:345},

{CDE:456, FGH:789, LMN:345},

{CDE:456, FGH:789, LMN:345},

{CDE:456, FGH:789, LMN:345},

{CDE:456, FGH:789, LMN:345},

{CDE:456, FGH:789, LMN:345} (等等……)

编辑

“datatableFields”是一个包含主对象内所有键的数组,同样,“neededFields”是一个包含需要保留的键的数组。

【问题讨论】:

  • 我不明白你为什么不做 $.each(table, function(){}) 什么包含 datatableFields
  • 因为这会遍历整个对象(可能会很大),我正在尝试优化函数正在遍历而不是向下。
  • datatableFields 是关联数组吗?
  • 不,datatableFields 是一个简单的数组,在我上面的示例中,它将包含 {ABC,CDE,FGH,IJK,LMN}。

标签: javascript jquery


【解决方案1】:

替换您的以下行:

delete table[b];

对于这个:

delete table[a];

因为元素的索引在$.each回调的第一个参数上,所以在你的例子中它是a参数,而b包含值,详见jQuery.each()

【讨论】:

  • 谢谢,但不幸的是这不起作用。现在,这会从整个对象中删除“对象”而不是单个“键”。
  • 尝试在tinker.io 上提供一个测试用例,以便我们更好地重现您的问题..
【解决方案2】:

您是否考虑过为此使用 Array.map

function neededFields( a_field ) {

  delete a_field["IJK]
  return a_field; 
}

datatableFields.map( neededFields );

http://jsfiddle.net/aartiparikh/XaXeA/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多