关于数组对比的一个小函数!
前两天做的项目中,需要实现两个数组之间进行比较!找出哪个是新增的项,哪些是删除的项!(前提是我们这两数组中不会有重复的项!而且每项都是一个JSON,里面的emplId是区分的标识);
下面直接看函数,虽然显得比较繁琐,但是理解起来还是非常容易的!
1 function checkmen(older,newer){ 2 var jsondata={"add":[], 3 "del":[]};//用于数组返回值 4 for(var i=0;i<older.length;i++){ 5 var num=0; 6 for (var j=0;j<newer.length;j++) { 7 if(older[i].emplId==newer[j].emplId){ 8 9 }else{ 10 num++;//判断数组中原来的项里面和新的数组中每项进行对比,如果不一样的话,那就给标志num加1; 11 } 12 } 13 if(num==newer.length){//如果不相同的次数和新数组的长度相同,也就是说明这项是已经被删除了!这里就可以把这个删除的项存储起来了! 14 jsondata.del.push(older[i]) 15 } 16 } 17 for(var i=0;i<newer.length;i++){//这次是刚刚相反,可以得到新增的项。 18 var num=0; 19 for (var j=0;j<older.length;j++) { 20 if(newer[i].emplId==older[j].emplId){ 21 22 }else{ 23 num++; 24 } 25 } 26 if(num==older.length){ 27 jsondata.add.push(newer[i]) 28 } 29 } 30 return jsondata;//返回json数据,如果没有新增和删除的项,则这个字段返回空数组! 31 } 32 var older=[{"emplId":001},{"emplId":002},{"emplId":003},{"emplId":007}]; 33 var newer=[{"emplId":005},{"emplId":004},{"emplId":003}]; 34 var data1 = checkmen(older,newer); 35 console.log(JSON.stringify(data1.del));//测试
这个方法其实是比较繁琐的,因为循环套循环,这样运算量是成指数增加的,好在我们这个数组的项不是很多,否则就……
欢迎大家提意见!一起参与讨论