Filter()数组过滤-简单有效的方法

一、题目说明:

题目以及基本思路

1 | 表格中要点击删除按钮删除ID对应的那条数据,data中声明tabledata=[]存放表格中的数据,要将数
    组中与对应删除数据相同的元素过滤掉,然后其余数据重新赋值给tabledata数组,这样,就可以删
    除对应的那条数据。
2 | tabledata = [];(数组中的列表数据是通过后台列表接口数据赋值后的)

页面效果展示

表格示例图.png

页面代码展示
表格数据.png

点击删除 (运用 Filter() 方法比较)

delPartner(id, code) {         //接受参数id 和 code
      this.$confirm("此操作将永久删除该合作伙伴, 是否继续?", "提示", {     //确定弹框
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {       //确定删除
          del_partner({         //调用删除接口
            id: id,
            code: code
          })
            .then(response => {     //删除成功的回调函数
              const { code } = response;
              if (code === CODE_Success) {    //如果code为100000,表示接口成功

               重点来了:运用 filter 过滤数组,判断要删除的数据 id 是否与数组中某个数据 id 
相同 ,如果相同把它删除,然后把所有其余不相同的 id 的数据再赋值给 tabledata 数组,这样就把想
要删除的那条数据删除了

                this.tableData = this.tableData.filter(item => item.id !== id);
                this.$message({ message: "删除成功", type: "success" });
                this.getPartners();
              } else {
                this.$message.warning({
                  message: `不存在伙伴数据`,
                  duration: 1000
                });
              }
            })
            .catch(error => {
              console.log(error);
            });
          this.total = this.total - 1;
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消禁用"
          });
        });
    }

数组过滤的方法其实还有很多,下面就给大家也一一展示出来,大家可以尝试着运用,下面的方法我并没有亲自实践过,大家有什么问题或意见就留言区一起讨论吧,不喜勿喷哦~~~

补充一个使用es6新增Set函数快速数组去重
  • 使用new Set()快速数组去重:

  let arr = [1, 2, 2, 3, 4, 5, 5, 5, 6]
    let set = new Set([...arr])
    console.log([...set]) //[1, 2, 3, 4, 5, 6]


    function SetArr(array) {
        return Array.from(new Set(array));
    }
    console.log(SetArr([1, 1, 2, 2, 3, 4, 4]))  // [1, 2, 3,4]
一、JavaScript数组过滤相同元素的6种方法:

以下内容摘自原链接:https://www.jianshu.com/p/600bbb8cd1c1

1、题目说明

声明一个数组,将数组中的相同元素过滤掉,然后存入到一个新数组resultArr = []中;
var arr = [1,2,2,3,4,5,5,6,5,6];
var resultArr = []//该数组的结果应该为1,2,3,4,5,6

2、基本思路
1、采用循环嵌套
2、外层循环将数组中的值赋给新的数组
3、内层循环通过if语句判断新数组中是否有该值,如果有,则在外层循环中通过if语句判断,让元素不赋给新数组.(查重)

二、方法解析

方法一:比较内层循环变量的值.

var arr = [1,2,2,3,4,5,5,6,5,6];
var resultArr = [];
//外层循环进行赋值
for (i = 0; i < arr.length; i++) {
   //内层循环进行重复判断
   for (j = 0; j < resultArr.length; j++) {
       if (resultArr[j] == arr[i]) {
           break;//一旦有重复arr[i],跳出循环
       }
   }
   //如果resultArr这个数组中没有arr[i],那么j经过内层循环后没有break,值应为resultArr.length
   if (j == resultArr.length) {
       resultArr[resultArr.length] = arr[i];
   }
}
console.log(resultArr); //1,2,3,4,5,6

方法二:计数法.

var arr = [1,2,2,3,4,5,5,6,5,6];
var count; //声明一个变量,用来计数
var resultArr = [];
for (i = 0; i < arr.length; i++) {
    count = 0;  //每次初始化计数变量
    for (j = 0; j < resultArr.length; j++) {
        if (resultArr[j] == arr[i]) {
            count++; //一旦进入该if语句,则计数变量自加
            break;
        }
    }
    //如果count等于0 ,那么说明内层循环中没有进入if语句,则resultArr中没有和arr[i]重复的元素
    if (count == 0) {
        resultArr[resultArr.length] = arr[i];
    }
}
console.log(resultArr); //1,2,3,4,5,6

方法三:flag标志法(也叫假设成立法)

var arr = [1,2,2,3,4,5,5,6,5,6];
var resultArr = []; //[1,2,3]
var flag; //声明一个变量,用来当做假设变量
for (var i = 0; i < arr.length; i++) {
    flag = true;  //每次初始化假设变量,假设result中没有和arr[i]重复的元素,赋值true,
    for (j = 0; j < resultArr.length; j++) {
        if (resultArr[j] == arr[i]) {
            flag = false; //一旦进入该if语句,则表示resultArr中有重复的的arr[i],则假设不成立,赋值false
            break;
        }
    }
    //如果flag为ture,赋值给resultArr这个数组
    if (flag) {
        resultArr[resultArr.length] = arr[i];
    }
}
console.log(resultArr);//1,2,3,4,5,6

方法四:使用sort()方法排序后比较

var arr = [1,2,2,3,4,5,5,6,5,6];
var resultArr = [];
//使用数组的sort()方法对arr进行排序,也可以使用冒泡排序
arr.sort(function (a, b) {
    return a - b;
});
//排序后,arr变成了[1, 1, 2, 2, 3, 3, 4, 5, 5,6,6]

//使用for循环,从上面的数组可以看出,如果数组元素arr[i]和arr[i+1]不相等,则表示arr[i]之后不再有与arr[i]相等的重复元素
for (i = 0; i < arr.length; i++) {
    if (arr[i] != arr[i + 1]) {
        //将arr[i]赋值给resultArr数组.
        resultArr[resultArr.length] = arr[i];
    }
}
console.log(resultArr); //1,2,3,4,5

方法五:使用filter()方法比较

var arr = [1,2,2,3,4,5,5,6,5,6];
var resultArr;
//采用filter()方法过滤掉数组中重复的元素,filter()方法中传入一个过滤函数作为参数.
resultArr = arr.filter(function (item, index, self) {
    //indexOf返回的是arr中的第一个元素的索引值,所以下面语句过滤掉了arr中重复的元素.
    return self.indexOf(item) == index;

});
console.log(resultArr); //1,2,3,4,5,6

方法六:使用缓存对象方法比较

var arr = [1,2,2,3,4,5,5,6,5,6];
var resultArr = [];
    var cache = {};  //声明一个缓存对象
    for(var i = 0 ; i < arr.length; i ++){//循环数组arr
        if(!cache[arr[i]]){//进行判断,如果缓存对象中没有这个属性名的话,我们就把该数组赋值给resultArr,并把该属性名赋值为true
            cache[arr[i]] = true;
            resultArr.push(arr[i]);
        }
    }
    console.log(resultArr);  // 1,2,3,4,5,6
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 3,912评论 2 13
  • 一、框架 1、Mac系统及常用工具、进制;C数据类型、常量变量、运算符、表达式、格式化输入输出 2、关系运算符、逻...
    师景福阅读 687评论 0 1
  • 第三章 方法和数组 3.1 概述 还记得我们的HelloWorld例程吗?我们现在对于输出语句应该已经很熟悉了, ...
    BWH_Steven阅读 235评论 0 1
  • 刚开始报名越野赛的时候也是一次巧合,是因为看了斯巴鲁勇士赛,只有一个感觉,就是哇塞,拍照应该很好看,应该特别不错吧...
    墙角一朵小花阅读 397评论 0 1
  • 2018/02/26 周一 奇迹感恩日记 奇迹 1. 今天我很开心。早上起来吸着山脚下新鲜的空气,听着小鸟叽叽喳喳...
    木易江鳥阅读 220评论 0 0