2012-11-23 37 views
0

有人能解释我在做这到底错在这里:删除从Javascript的一个关键的每一个实例对象

我有以下代码:

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(表)”返回相同的结果!

有什么想法?

仿佛我有以下的对象的示例:

{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”是包含需要被保持的键阵列。

+0

我不明白你为什么不这样做。每个$(表,函数(){})包含什么datatableFields –

+0

因为这会贯穿整个对象(这可能相当大),我试图优化功能而不是失败。 – JasonMHirst

+0

datatableFields是一个关联数组? –

回答

1

替换您如下一行:

delete table[b]; 

这一个:

delete table[a]; 

因为元素的索引是在$.each回调的第一个参数,所以它在a参数你例如,b包含该值,详情请参阅jQuery.each()

+0

谢谢,但不幸的是不起作用。这现在从整个对象中删除“对象”而不是个人的“键”。 – JasonMHirst

+0

尝试在http://tinker.io上提供一个测试用例,以便我们可以更好地重现您的问题。 – Nelson

相关问题