利用replace求两个数组的差集

数组操作-对比两个数组,求出两个数组的差集,删除了哪些元素,新增了哪些元素。

代码示例

这里不再说其他的一些实现方式,直接给出一段代码吧:


function getArrDiff(oldArr,newArr){
  //这里就假设传入的数据,是两个数组,不做合法性验证
  var i,len=newArr.length,
	del = [],
	add = [],
	oldStr = ","+oldArr.join(",,")+",",
	one = "";
	
  for(i=0;i<len;i++){
	one = ","+newArr[i]+",";
	if(oldStr.indexOf(one) != -1){
	  oldStr = oldStr.replace(one,"");
	  //把对应的数据删掉,最后保留的数据,就是被删掉的数据
	}else{
	  add.push(newArr[i]);
	  //新数据,被添加到一个数组中
	}
  }
  oldStr = oldStr.substring(1,oldStr.length-1);
  del = oldStr?oldStr.split(",,"):[];
	
  return {
	del:del,
	add:add
  }
}

var oldArr = [1,2,3,4],
  newArr = [3,4,5,6,7,8];
console.log(getArrDiff(oldArr,newArr));


其实该方法,就是采用把对应的数组先转换为字符串,对该字符串进行一个结构化处理,这也可以减少for循环的次数,所以~~

对数组元素进行结构化,是一个很高效的查找对应元素的技巧,比如jQueryhasClass方法,就是使用这种方法进行判断的。

其他的不多说了,又一篇凑数的。

本文地址:http://www.zhangyunling.com/?p=352

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>