实现原有顺序的文本去重 Javascript Pro版

原来有个js版的去重,当时这是解决了当时的问题,解决不了现在将要解决的问题。
就修改了一个pro版,不改变第一次出现的顺序。

javascript版
思路就是,创建一个存放结果的新数组和一个空对象,循环出来数组看看有没有对象,没有就填进数组并将作为对象的一个属性并赋个值。如此往复,有对象的就跳过,没对象的挑出来。
写了两种循环,都可以用,用forEach显得逼格高一点。


var arr = [1,2,2,3,2,5,6,'太棒了','重复','不重复','重复',1,1,1,1,1,1,"dyniao"];
function uniqueArr(arr){
	var n = [];
	var o = {};
	arr.forEach(function(e){
		if(!o[e]){
			n.push(e);
			o[e] = 1;
		}
	});
/*	for(var i = 0; i < arr.length; i++){
		if(!o[arr[i]]){
			n.push(arr[i]);
			o[arr[i]] = 1;
		}
	}*/
return n;
}
console.log(uniqueArr(arr));

为了不让此文显得不太水,后边再写来个更水的。

php版
一般 array_unique 去重后,用 array_values 把键值重新排序。
但是应该是用 array_flip 效率更高,因为会将键值互换,原来重复的值会变为相同的键,然后再进行一次键值互换,把键和值换回来则可以完成去重。


$arr = (1,2,2,3,2,5,6,'太棒了','重复','不重复','重复',1,1,1,1,1,1,"dyniao");
$arr = array_unique($arr);
$arr = array_values($arr);
//用下边效率更高。
$arr = array_flip($arr);
$arr = array_flip($arr);
print_r($arr);

发表评论

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.