原来有个 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);
--- EOF ---
本文链接:
订阅本站:feed
声明:博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

标签: none

添加新评论