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

  • 深度克隆

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());
    原文作者:whjin
    原文地址: https://segmentfault.com/a/1190000009016037
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞