javascript 数组的remove方法

javascript原生一直没有提供删除功能,于是自己写了几个remove方法,主要是要注意遍历数组时使用splice方法是会在遍历没完成时就会改变数组对象的length长度,最简单方法是从数组尾部开始遍历,用递减来循环,就像我这里LastRmove的注释部分,这种方法直观又不受长度动态变化 的影响,然后我想是不是也要像undescore一样加上前后顺序和匹配到第一个就返回这种功能,于是就作了些小改动,可以从头部或是尾部匹配第一个移除后就返回,或是遍历整个数组。

// 遍历整个数组,移除匹配item的元素,使用强比较===,给第二个参数的话就从头开始找到第一个匹配item元素移除后返回;
// 如有找到元素返回处理后的数组自身,如果没有找到过就返回undefined;
Array.prototype.Remove = function (item, all) {
    var result, isType = Object.prototype.toString, i, len, start, hasLast = arguments[2];
    start = 0, len = this.length;
    for (i = start; i < len;) {
        var isPass = true, inx;
        if (!hasLast) {
            inx = i;
        } else {
            inx = len - 1;
        }
        if (isType.call(item) == ‘[object Array]‘) {
            for (var ii = 0, iimax = item.length; ii < iimax; ii++) {
                if (this[inx] === item[ii]) {
                    isPass = false;
                    break;
                }
            }
        } else if (this[inx] === item) {
            isPass = false;
        }
        if (!isPass) {
            result = true;
            this.splice(inx, 1);
            if (all) {
                break;
            }
        } else if (!hasLast) {
            len = this.length;
            i++;
        } else {
            len--;
        }
    }
    return result ? this : void 0;
}
// 同上面的Rmove,从尾部开始查找,找到后删除第一个匹配的立刻返回;
// 如有找到元素返回处理后的数组自身,如果没有找到过就返回undefined;
Array.prototype.LastRemove = function (item) {
    /* var result = [], isType = Object.prototype.toString.call,isFrist;
     for (var i = this.length - 1; i >= 0; i--) {
     var isPass = true;
     if (Object.prototype.toString.call(item) == ‘[object Array]‘) {
     for (var ii = 0, iimax = item.length; ii < iimax; ii++) {
     if (this[i] === item[ii]) {
     isPass = false;
     break;
     }
     }
     } else if (this[i] === item) {
     isPass = false;
     }
     if (!isPass) {
     if(isFrist && !all){
     break ;
     }
     isFrist = true;
     this.splice(i, 1);
     }
     }*/
    return this.Remove(item, true, true);
}
// 效果同上面的,遍历整个数组,区别是于 返回的是个新的数组,是原数组的引用;
Array.prototype.RemoveAt = function (item) {
        var result = [], isType = Object.prototype.toString, isPass, val;
        for (var inx = 0, len = this.length; inx < len; inx++) {
            isPass = true;
            val = this[inx];
            if (isType.call(item) == ‘[object Array]‘) {
                for (var ii = 0, iimax = item.length; ii < iimax; ii++) {
                    if (val === item[ii]) {
                        isPass = false;
                        break;
                    }
                }
            } else if (val === item) {
                isPass = false;
            }
            if (isPass) {
                result.push(val);
            }
        }
        return result;
    }
时间: 2024-08-14 03:22:29

javascript 数组的remove方法的相关文章

js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf = function (e) { for (var i = 0, j; j = this[i]; i++) { if (j.indexOf(e) != -1) { return i; } } return -1; } if (anSwerIdValue.length < 14) { alert(&quo

javascript数组强大splice方法

Javascript中总有一些所谓的细节知识会让你目瞪口呆. 前段时间,项目组新增一个需要,要求系统中所有显示时间的地方支持日期格式可定制 什么事日期格式可定制呢,在平常呢,我们看到的时间格式一般是"yyyy-MM-dd"形式的,现在要支持如下六种: yyyy-MM-dd  hh:mm:ss MM-dd-yyyy hh:mm:ss dd-MM-yyyy hh:mm:ss yyyy/MM/dd hh:mm:ss MM/dd/yyyy hh:mm:ss dd/MM/yyyy hh:mm:s

JavaScript——数组的indexOf()方法在IE8中的兼容性问题

昨天在工作中遇到一个问题:数组的indexOf()方法在IE8中无效. 如以下代码在IE8中报错“对象不支持“indexOf”属性或方法”: var arr = [1,2,3]; var index = arr.indexOf(3); 解决方法1:在调用的indexOf方法前加上toString()将数组转换为字符串,再调用indexOf(),但是这时又发现3的index并不是我们预期的2,而是4,因为转换为字符串之后是"1,2,3",在查index的时候把逗号也算进去的了,显然这也不

Javascript数组Array的方法总结!

1.join() 将数组的元素组成一个字符串,以分隔符连接,如果省略则默认逗号为分隔符,该方法只接收一个参数:分隔符.此方法不会改变原数组. let arr = [1,2,3,4] let arr1 = arr.join(); let arr2 = arr.join('-'); console.log(arr1);//1,2,3,4 console.log(arr2);//1-2-3-4 console.log(arr);//(4) [1, 2, 3, 4] 2.push() 可以添加任意数量的

JavaScript数组常用API方法汇总

1.push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度. const animals = ['pigs', 'goats', 'sheep']; const count = animals.push('cows'); console.log(count); // expected output: 4 console.log(animals); // expected output: Array ["pigs", "goats", "s

javascript数组18中方法总结

1.push(a,b,c,d,e) 添加到数组的最后面,可以添加一个或者多个参数,改变原有数组 返回添加后数组个数 2.pop() 删除数组的最后一个,改变原来数组 返回删除的那个数值 3.unshift(a,b,c,d,e) 添加到数组的最前面,可以添加一个或者多个参数,改变原有数组 返回添加后数组个数 4.shift() 删除数组的第一个,改变原有数组 返回删除的那个数值 5.reverse() 将整个数组翻转,改变原有数组 返回翻转后的数组 6.concat() 复制数组,可添加参数,参数

了解JavaScript 数组对象及其方法

数组在我目前学习过的编程语言中都可以见到, 形形色色的方法也数不胜数, 不过功能都一样, 最多也就是方法名稍稍有所不同, 老外也没个准啊, 如果英语比较好的同学对于学习方法(method)来说是很快的, 因为基本都可以翻译出来, 不过也要勤加锻炼, 总体来说, 英语水平不怎么影响编程技术, 看看API的话, 认识点简单的词汇, 就差不多了. 数组对象 文中一再的把数组和对象一起说, 是因为数组具有对象的一切特性, 更准确的说数组属于一类对象, 一类继承自Array.prototype的对象, 所

给javascript数组添加原型方法

简单的例子:判断 数组中是否有某个子元素 1 Array.prototype.in_array = function (str) { 2 var tempObj = {}; 3 for(var i=0;i<this.length;i++){ 4 tempObj[this[i]] = '' 5 } 6 return str in tempObj 7 } 然后,就可以调用这个方法: 1 var arr = ['皇室战争','捕鱼达人','王者荣耀','部落冲突']; 2 3 console.log(

JavaScript数组常用的方法

var arr = [1, 2, 3.14, 'Hello', null, true]; arr.length; // 6 直接给Array的length赋一个新的值会导致Array大小的变化 var arr = ['A', 'B', 'C']; arr[1] = 99; arr; // arr现在变为['A', 99, 'C'] indexOf 与String类似,Array也可以通过indexOf()来搜索一个指定的元素的位置: var arr = [10, 20, '30', 'xyz']