0

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

我有以下代码:

    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”是一个包含需要保留的键的数组。

4

2 回答 2

1

替换您的以下行:

delete table[b];

对于这个:

delete table[a];

因为元素的索引在$.each回调的第一个参数上,所以它是a您示例中的参数,而b包含值,请参阅jQuery.each()了解详细信息。

于 2012-11-23T10:04:45.587 回答
0

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

function neededFields( a_field ) {

  delete a_field["IJK]
  return a_field; 
}

datatableFields.map( neededFields );

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

于 2013-10-13T20:40:45.257 回答