从Javascript对象中删除键的每个实例

时间:2012-11-23 09:57:50

标签: javascript jquery

有人可以解释一下我在这里做错了什么:

我有以下代码:

    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'。

但是...

看起来我的'delete table [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'是一个包含需要保存的键的数组。

2 个答案:

答案 0 :(得分:1)

替换以下行:

delete table[b];

这个:

delete table[a];

因为元素的索引位于$.each回调的第一个参数上,所以它是示例中的a参数,而b包含值,请参阅{{3有关详细信息。

答案 1 :(得分:0)

您是否考虑过将Array.map用于此

function neededFields( a_field ) {

  delete a_field["IJK]
  return a_field; 
}

datatableFields.map( neededFields );

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