美文网首页vue集锦
Filter()数组过滤-简单有效的方法

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

作者: 小鱼儿_逆流而上 | 来源:发表于2019-09-26 18:11 被阅读0次
一、题目说明:

题目以及基本思路

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

相关文章

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

    一、题目说明: 题目以及基本思路 页面效果展示 数组过滤的方法其实还有很多,下面就给大家也一一展示出来,大家可以尝...

  • 数组去除数组中为“假”的元素。

    array.filter(Boolean)Array.prototype.filter()方法用于过滤数组,返回一...

  • ES5新增方法

    1. 数组方法forEach遍历数组 2. 数组方法filter过滤数组 3. 数组方法some 4. some和...

  • ES6 过滤

    1、 filter()过滤数组 filter不会改变原始数组,会返回新的数组 2、 filter()遍历数组 3、...

  • vue实用技巧整理(持续更新)

    数组过滤器--filter filter()是一个数组方法,它会创建一个新的数组,新数组中的元素是通过检查指定数组...

  • javascript filter详解

    filter() 简单讲filter就是一个数组过滤器,参数接收一个函数,数组的每一项经过函数过滤,返回一个符合过...

  • 前端常用数组方法

    es6 filter() 数组过滤方法总结1.创建一个数组,判断数组中是否存在某个值 2.也可以通过上面方法过滤掉...

  • vue常用之数组遍历

    遍历的三大方法:1、forEach,代替for循环的2、filter,根据条件过滤数组3、indexOf,数组循环...

  • ES6的语法笔记

    参考 遍历 forEach 过滤 filter 映射 map 汇总reduce 构造函数 数组方法 字符串方法 展...

  • PHP数组的进阶用法

    对于数组的基本操作,可参考PHP数组的相关操作 array_filter()过滤数组元素array_filter(...

网友评论

    本文标题:Filter()数组过滤-简单有效的方法

    本文链接:https://www.haomeiwen.com/subject/setssctx.html