2014-07-02 13 views
0

嘿,伙计我试图从数组中匹配第二个数组中的值的数组中删除所有对象。请允许我用一些例子来解释!如何根据第二个数组中的值从JS数组中删除对象

var originalObj = [ 
{"id":"88","name":"Lets go testing"}, 
{"id":"88","name":"Have fun boys and girls"}, 
{"id":"108","name":"You are awesome!"}, 
{"id":"99","name":"Have fun boys and girls"}, 
{"id":"108","name":"You are awesome!"}, 
{"id":"99","name":"Have fun boys and girls2"}, 
{"id":"108","name":"You are awesome!"} 
] 

目前我的javascript代码,我只能删除对象的一个​​指定的值,并与任何事件表示值

var updatedObj= $.grep(originalObj , function(e){ 
      return e.id!= '88'; 
     }); 

console.log(updatedObj) 
[ 
    {"id":"108","name":"You are awesome!"}, 
    {"id":"99","name":"Have fun boys and girls"}, 
    {"id":"108","name":"You are awesome!"}, 
    {"id":"99","name":"Have fun boys and girls2"}, 
    {"id":"108","name":"You are awesome!"} 
] 

我想要做到的是有.grep功能查找第二阵列看起来像这样。

var filterID = ["88","99"]; 

所以结果应该是这个样子

//Needs updating 
//var updatedObj= $.grep(originalObj , function(e){ 
//   return e.id!= '88'; <-- needs to match all filterID values instead 
//  }); 

console.log(updatedObj) 
[ 
    {"id":"108","name":"You are awesome!"}, 
    {"id":"108","name":"You are awesome!"}, 
    {"id":"108","name":"You are awesome!"} 
] 

任何帮助将不胜感激!

谢谢。

回答

2

您可以遍历数组中的所有值并按此方式进行过滤。

var updatedObj = originalObj; 
for (var i in filterID) { 
    updatedObj = $.grep(updatedObj , function(e){ 
    return e.id!= filterID[i]; 
    }); 
} 
+0

如果它的每一次覆盖它,在当前迭代的值将每次剥离出来,导致由迭代结束剥离出来的所有值... – Jnatalzia

+0

啊我看到现在,对不起 –

2

如果使用一个对象来表示密钥的列表来过滤这个变得简单:

var toRemove = { 
    88: true, 99: true; // keys significant, values thereof irrelevant 
}; 

var updatedObj = $.grep(originalObj, function(e) { 
    return !(e.id in toRemove); 
}); 

对于短数组,这是大约相同的效率作为双嵌套循环,即近似O(n * m),其中n是要过滤的数组大小,m是要移除的元素数量)。

然而,如果值的阵列,以过滤器是相当大,那么这将是O(n)(假设in操作者在固定时间内执行)

0

使用indexOf数组函数

var filterID = ["88","99"]; 
var updatedObj= $.grep(originalObj , function(e){ 
    return filterID.indexOf(e.id) === -1; 
}); 
0

你可以遍历数组中的所有值并按此方式进行过滤。

  var updatedObj = [ 
       {"id":"108","name":"You are awesome!"}, 
       {"id":"99","name":"Have fun boys and girls"}, 
       {"id":"108","name":"You are awesome!"}, 
       {"id":"99","name":"Have fun boys and girls2"}, 
       {"id":"108","name":"You are awesome!"} 
      ], 
      filterId = ["89","99"],result=[]; 
      $.each(updatedObj,function(index,item){ 
       if(filterId.indexOf(item.id) === -1){ 
        result.push(updatedObj[index]) 
       } 
      }) 
      console.log(result); 
相关问题