【发布时间】: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