有人可以解释一下我在这里做错了什么:
我有以下代码:
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'是一个包含需要保存的键的数组。
答案 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 );