因为工作需要,遇到两个对象数组A,B,找到A中B不存在的对象,并保存在一个数组中,之前一直采用正常的for循环的方式,每次找到一个便删掉的方式,比较麻烦,而且不是太好。先采用hash数组的方法来解决。
var roles=[{"des":"t04_Cm","name":"测试4","pId":null,"id":52}];
var allNodes=[{"noR":true,"iconOpen":"common/css/img/open.png","name":"类列表","pId":0,"id":0,"iconClose":"common/css/img/close.png","open":true},{"iconOpen":"common/css/img/open.png","des":"test01_Cm","name":"测试1","tableid":47,"pId":0,"id":47,"iconClose":"common/css/img/close.png","open":true},{"iconOpen":"common/css/img/open.png","des":"test02_Cm","name":"测试2","tableid":48,"pId":0,"id":48,"iconClose":"common/css/img/close.png","open":true},{"iconOpen":"common/css/img/open.png","des":"test03_Cm","name":"测试3","tableid":49,"pId":0,"id":49,"iconClose":"common/css/img/close.png","open":true},{"iconOpen":"common/css/img/open.png","des":"t04_Cm","name":"测试4","tableid":52,"pId":0,"id":52,"iconClose":"common/css/img/close.png","open":true}];
var rest=[],hash=[];
var roles=[{"des":"t04_Cm","name":"测试4","pId":null,"id":52}];
var allNodes=[{"noR":true,"iconOpen":"common/css/img/open.png","name":"类列表","pId":0,"id":0,"iconClose":"common/css/img/close.png","open":true},{"iconOpen":"common/css/img/open.png","des":"test01_Cm","name":"测试1","tableid":47,"pId":0,"id":47,"iconClose":"common/css/img/close.png","open":true},{"iconOpen":"common/css/img/open.png","des":"test02_Cm","name":"测试2","tableid":48,"pId":0,"id":48,"iconClose":"common/css/img/close.png","open":true},{"iconOpen":"common/css/img/open.png","des":"test03_Cm","name":"测试3","tableid":49,"pId":0,"id":49,"iconClose":"common/css/img/close.png","open":true},{"iconOpen":"common/css/img/open.png","des":"t04_Cm","name":"测试4","tableid":52,"pId":0,"id":52,"iconClose":"common/css/img/close.png","open":true}];
var rest=[],hash=[];
$.each(roles,function(key,val){
hash[val.id]=true;
})
$.each(allNodes,function(index,value){
if(hash[value.id]===undefined){
rest.push(value);
}
});
console.log(rest)
再介绍一种hash数组去重的方法,可以将数组中的相同项删掉。
function unique2(arr){
//i遍历arr,同时创建两个空数组result和hash
for(var i=0,result=[],hash=[];
i<arr.length;
i++){
//如果hash中以当前元素为key的元素是undefined
if(hash[arr[i]]===undefined){
//将当前元素追加到result结尾
result[result.length]=arr[i];
//在hash中添加一个新元素: key为当前元素值,值为true
hash[arr[i]]=true;
}
}//(遍历结束)
return result;//返回result
}