JS学习笔记——数组去重

复制代码
<script type="text/javascript">

//indexOf”是ECMAScript5方法,IE8以下不支持,需多写兼容低版本浏览器代码。 
Array.prototype.indexOf=Array.prototype.indexOf|| function(item){
    for(var i=0;i<this.length;i++)
    {
        if(this[i]===item)
        {
            return i;
        }
    }
    return -1;
}
var obj={
    name:'312'
}
function newobj(){

}
var a=[0,0,new String(1), new Number(1),obj,obj,new newobj(),new newobj()];


Array.prototype.forEach = Array.prototype.forEach || function(callback, thisArg) {
    if (!callback || typeof callback !== 'function') return;

    for (var i = 0, j = this.length; i < j; i++) {
        callback.call(thisArg, this[i], i, this);
    }
}

function removeDuplicatedItem1(arr)
{
    var ret=[];
    for(var i=0;i<arr.length;i++)
    {
        if(ret.indexOf(arr[i])===-1)
        {
            ret.push(arr[i]);
        }
    }
    return ret;
}  // 0 1  1 [object object] [object object ][object object] 


function removeDuplicatedItem2(arr)
{
    var ret=[];
    arr.forEach(function(e,i,arr){
        if(arr.indexOf(e)===i)
            ret.push(e);
    });
    return ret;
} //// 0 1  1 [object object] [object object ][object object] 


function removeDuplicatedItem3(ar) {
    var ret = [],
        end;
    ar.sort();
    end = ar[0];
    ret.push(ar[0]);

    for (var i = 1; i < ar.length; i++) {
        if (ar[i] !== end) {
            ret.push(ar[i]);
            end = ar[i];
        }
    }

    return ret;
}// 0 1  1 [object object] [object object ][object object] 



//上述都做了两次循环  因此需要优化

function removeDuplicatedItem4(arr)//unique([ new String(1), new Number(1) ])  无法判断
{
    var tem={};
    var ret=[];
    for(var i=0;i<arr.length;i++)
    {
        var item=arr[i];
        var key=typeof(item)+item; //因为对象只能存放字符串,所以要区分  1  '1'  
        if(!tem[key])
        {
            tem[key]=1;
            ret.push(item);
        }
    }
    return ret;
} //0 1 [object object]

</script>
复制代码

 

posted @   herozhou工巧  阅读(294)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示