资讯专栏INFORMATION COLUMN

数组操作(去重,深复制...)

klivitamJ / 1601人阅读

摘要:否则存入结果数组给本地对象增加一个原型方法,它用于删除数组条目中重复的条目可能有多个,返回值是一个包含被删除的重复条目的新数组下面求中最大值正确的是为对象添加一个去除重复项的方法,得到去重后的数组

深度克隆

function clone(Obj) {
    var buf;
    if (Obj instanceof Array) {
        var buf = [];//创建一个空数组
        var i = Obj.length;
        while (i--) {
            buf[i] = clone(Obj[i]);
        }
        return buf;
    } else if (Obj instanceof Object) {
        buf = {};//创建一个空对象
        for (var k in Obj) {
            buf[k] = clone(Obj[k]);
        }
        return buf;
    } else {
        return Obj;
    }
}

数组去重-方法一

Array.prototype.unique1 = function () {
    var tempArr = [];// 一个新的临时数组
    for (var i = 0; i < this.length; i++) {//遍历当前数组
        //如果当前数组的第i已经保存进了临时数组,那么跳过,
        //否则把当前项push到临时数组里面
        if (n.indexOf(this[i]) == -1) {
            n.push(this[i]);
        }
        return tempArr;
    }
};

数组去重-方法二

Array.prototype.unique2 = function () {
    var result = {},
        tempArr = [];//result为hash表,tempArr为临时数组
    for (var i = 0; i < this.length; i++) {//遍历当前数组
        if (!hash[this[i]]) {//如果hash表中没有当前项
            hash[this[i]] = true;//存入hash表
            tempArr.push(this[i]);//把当前数组的当前项push到临时数组里面
        }
    }
    return tempArr;
};

数组去重-方法三

Array.prototype.unique3 = function () {
    var result = [this[0]];//结果数组
    for (var i = 1; i < this.length; i++) {//从第二项开始遍历
        //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
        //那么表示第i项是重复的,忽略掉。否则存入结果数组
        if (this.indexOf(this[i]) == i) {
            result.push(this[i]);
        }
    }
    return result;
};

1、给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含【被删除的重复条目的新数组

Array.prototype.unique = function () {
    var result = [];
    for (var i = 0; i < this.length; i++) {
        for (var j = i + 1; j < this.length; j++) {
            if (this[i] === this[j]) {
                result.push(this.splice(j, 1)[0]);
            } else {
                j++;
            }
        }
    }
    return result;
};
console.log(["a", "b", "c", "d", "b", "a", "e", "asd", "as", 12, 56, 1, 12, "as"].unique());

var a = [1,4,5,2,9]; 下面求a中最大值正确的是

var a = [1, 4, 5, 2, 9];
console.log(Math.max.apply(null, a));

为 Array 对象添加一个去除重复项的方法,得到【去重后的数组

Array.prototype.uniq = function () {
    var arr = [];
    var flag = true;
    for (var i = 0; i < this.length; i++) {
        if (arr.indexOf(this[i]) == -1) {
            if (this[i] != this[i]) {
                if (flag) {
                    arr.push(this[i]);
                    flag = false;
                }
            } else {
                arr.push(this[i])
            }
        }
    }
    return arr;
};
console.log([false, true, undefined, null, NaN, 0, 1, {}, {}, "a", "a", NaN].uniq());

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88226.html

相关文章

  • 案例 - 收藏集 - 掘金

    摘要:同行这么做使用实现圆形进度条前端掘金在开发微信小程序的时候,遇到圆形进度条的需求。实现也谈数组去重前端掘金的数组去重是一个老生常谈的话题了。百度前端技术学院自定义前端掘金一标签概念元素表示用户界面中项目的标题。 闲话图片上传 - 掘金作者:孙辉,美团金融前端团队成员。15年毕业加入美团,相信技术,更相信技术只是大千世界里知识的一种,个人博客: https://sunyuhui.com ...

    张金宝 评论0 收藏0
  • 案例 - 收藏集 - 掘金

    摘要:同行这么做使用实现圆形进度条前端掘金在开发微信小程序的时候,遇到圆形进度条的需求。实现也谈数组去重前端掘金的数组去重是一个老生常谈的话题了。百度前端技术学院自定义前端掘金一标签概念元素表示用户界面中项目的标题。 闲话图片上传 - 掘金作者:孙辉,美团金融前端团队成员。15年毕业加入美团,相信技术,更相信技术只是大千世界里知识的一种,个人博客: https://sunyuhui.com ...

    huangjinnan 评论0 收藏0
  • 前端工具函数

    摘要:将一级的数据结构处理成树状数据结构处理成树状结构,一般就是需要节点和父节点标识,或者需要考虑以哪个节点为根节点生成树结构数据使用示例代码将一级的数据结构处理成树状数据结构字段名称比如父字段名称比如根节点的父字段的值需要处理的数据是否将一级的数据结构处理成树状数据结构 处理成树状结构,一般就是需要节点和父节点标识,或者需要考虑以哪个节点为根节点生成树结构数据 // 使用示例代码: list...

    or0fun 评论0 收藏0
  • 前端工具函数

    摘要:将一级的数据结构处理成树状数据结构处理成树状结构,一般就是需要节点和父节点标识,或者需要考虑以哪个节点为根节点生成树结构数据使用示例代码将一级的数据结构处理成树状数据结构字段名称比如父字段名称比如根节点的父字段的值需要处理的数据是否深复制数 将一级的数据结构处理成树状数据结构 处理成树状结构,一般就是需要节点和父节点标识,或者需要考虑以哪个节点为根节点生成树结构数据 // 使用示例代码...

    Channe 评论0 收藏0
  • JavaScript专题之浅拷贝

    摘要:专题系列第六篇,讲解深浅拷贝的技巧和以及实现深浅拷贝的思路前言拷贝也是面试经典呐数组的浅拷贝如果是数组,我们可以利用数组的一些方法比如返回一个新数组的特性来实现拷贝。所以我们可以看出使用和是一种浅拷贝。 JavaScript 专题系列第六篇,讲解深浅拷贝的技巧和以及实现深浅拷贝的思路 前言 拷贝也是面试经典呐! 数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice、co...

    RancherLabs 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<