javascript - 关于数组remove方法的其他写法
大家讲道理
大家讲道理 2017-04-11 11:47:51
[JavaScript讨论组]
Array.prototype.remove = function(obj){
    if(null == obj){ return false }
    for (var i =0 ,n =0 ;i

学javascript有一段时间了,今天看下论坛上的很多代码都不懂,前来问问,
1,为什么会想到这样的写法,他是怎么想的呢?
2,有没有更好点的写法,我感觉我很笨有的像伸手党。。。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(5)
阿神

Arrayremove方法肯定离不开splice,你的remove方法接受的是一个obj,如果不考虑对象不同,但是值相同的情况,那么下面的方法应该是最简单的:

Array.prototype.remove = function(obj) {
  let index = this.indexOf(obj);
  if(index !== -1) this.splice(index, 1);
}
PHPz

亲测上面的remove方法是有问题的。比如var arr = [1,2,3,4];arr.remove(5) //arr = [1,2,3]

ringa_lee

如果是不包含对象的数组、我这里写了一个方法

Array.prototype.remove = function(num){
    var l = this.length;
    for(var i=0;i<this.length;i++){
        if(this[i]==num){
            this.splice(i,1)
        }
    }
    if(l==this.length){
        console.log("没有删除任何元素")
    }
}

var arr = new Array("111111",8,11,4,5);

arr.remove("111111")
console.log(arr);

其实不是对象的话对比起来很简单、

你上面的方法确实有问题、如果输入一个无穷大的数字、他会删掉最后一个、最后一个length-=1不严谨

大家讲道理
Array.prototype.remove = function(elm, count, rect){
  count = count || -1 // 加入count参数, 默认删除全部, 若只要删除第一个, 传1, 0和负数都删除全部
  rect = []
  for(var i=0,l=this.length;i<l;i++){
    if(this[i]===elm){ // 注意一定要三个等号, 不然删除0, 会发现 false, null, "" 等都会被删除
      rect.push.apply(rect, this.splice(i,1)); i--; l--;
      if(count>0 && rect.length>=count) return rect;
    }
  }
  return rect; // 返回已删除的元素列
}

var arr = [0, "", null, null, 6, false];
var dels = arr.remove(null);

console.log(arr, dels);
// [0, "", 6, false]
// [null, null]

不谢

迷茫

用reduce吧:

Array.prototype.remove = function (item) {
    return this.reduce((x, y) => {
        if (y !== item) x.push(y)
        return x
    }, [])
}
let a = [1,2,3,4,5,6].remove(2)
console.log(a)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号