过滤器filter是数组对象的一个方法,该方法不会改变原数组。该数组有两个参数第一个是函数并且数组中每个元素都会执行这个函数,这个函数共有三个参数第一个为必填当前元素的值,第二个为可选,当前元素的索引值。第三个可选,当前元素属于的数组对象。第二个是回调函数对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"。

下面通过代码实践一下filter的一些作用。‘

    <script>let arr=[1,2,3,4,5,6,7,8];arr.filter(function(value,index,arr){console.log("当前值"+value)console.log("当前值"+index)console.log("当前所属对象"+arr)})</script>

上面的代码分别打印的是:

当前值1
当前值0
当前所属对象1,2,3,4,5,6,7,8
当前值2
当前值1
当前所属对象1,2,3,4,5,6,7,8
当前值3
当前值2
当前所属对象1,2,3,4,5,6,7,8
当前值4
当前值3
当前所属对象1,2,3,4,5,6,7,8
当前值5
当前值4
当前所属对象1,2,3,4,5,6,7,8
当前值6
当前值5
当前所属对象1,2,3,4,5,6,7,8
当前值7
当前值6
当前所属对象1,2,3,4,5,6,7,8
当前值8
当前值7
当前所属对象1,2,3,4,5,6,7,8

上面分别打印的是值于索引和该索引数组的所有值

我们可以对其修改一下值看一下是否会改变原数组:

        let arr=[1,2,3,4,5,6,7,8];let arr1= arr.filter(function(value,index,arr){arr[index]=value++console.log(arr)return arr[index]})console.log(arr1)console.log(arr)

通过打印出来发现是不会改变原数组arr的。

接下来我们实践一下第二个参数的作用。第二个参数说的是对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"

我们可以打印一下this看一下

        let arr=[1,2,3,4,5,6,7,8];let obj={name:'123',age:12,sum:100}let arr1= arr.filter(function(value,index,arr){console.log(this)return arr[index]},obj)

上面这对代码他会打印对应次数的obj对象。

当我们去掉obj看this的话它打印的是window并不是我们说的‘undefined’这是为什么呢?,接下来我们开启严格模式看一下是不是这样的呢?

通过开启严格模式‘use strict’它的打印确实变成的undefined了。

再次总结,省略第二个参数的话在开启严格模式下,他的this指向undefined在不开启严格模式下的值是window,在不省略的下,他的this。指向我们传入的对象。

filter的大致意思我们搞懂了就可以对他进行一些操作赋值什么的了。

看一下代码

        let arr=[1,2,3,4,5,6,7,8];let obj={name:'123',age:12,sum:100}let arr1= arr.filter(function(value,index,arr){obj.sum+=valuereturn value>1},obj)console.log(obj)console.log(arr1)

上面这段代码,我把arr数组的所有值都添加到了obj对象的sum属性上,并且把arr中所有大于1的值赋值给了arr1数组。

那filter是深拷贝还是浅拷贝呢?

打印看一下

        let arr=[1,2,3,4,5,6,7,8,[1,1,1]];let obj={name:'123',age:12,sum:100}let arr1= arr.filter(function(value,index,arr){obj.sum+=valuereturn value},obj)arr1[arr.length-1].push(2)console.log(obj)console.log(arr)

在是一个多维数组的情况下他是一个浅拷贝,在是一个数据类型全部是基本数据类型的话是一个深拷贝。

具体还有什么功能以后用多了在说吧。

有什么缺少的功能可以评论出来,谢谢

js过滤器filter的使用相关推荐

  1. 【Vue2】自定义指令 directives 过滤器 filter

    自定义指令 directives directives 的简写 我们可以通过配置项 directives 来自定义指令 自定义指令时直接写指令名 XXX,使用时需要加上前缀为 v-XXX <di ...

  2. Javaweb核心之servlet规范过滤器-----Filter

    2 Servlet规范中的过滤器-Filter 2.1 过滤器入门 2.1.1 过滤器概念及作用 过滤器--Filter,它是JavaWeb三大组件之一.另外两个是Servlet和Listener. ...

  3. 如何在vue上全局使用过滤器filter

    如何在vue上全局使用过滤器filter 在src下新建文件夹utils,创建filter.js文件 import Vue from 'vue'Vue.filter("publishdate ...

  4. ----------------------过滤器filter简单登录和乱码过滤----

    web.xml里面的代码 <?xml version="1.0" encoding="UTF-8"?> <web-app version=&q ...

  5. ⑧javaWeb之在例子中学习(过滤器Filter)

    前言 本系列 Servlet & JSP 学习系列[传送门]逐渐到了中期了,希望大家喜欢我写的,总结的点点滴滴- 今天我们来讲讲过滤器 你们的支持是我写博客的动力哦. 最近买了两本书,觉得大二 ...

  6. 一场由过滤器Filter引发的血案

    一场由过滤器Filter引发的血案 事件起因 本来应该是下图的登录界面 变成了这样 What's the fuck????? 抓狂 原因 解决方法: 在过滤器中给资源文件开个绿色通道

  7. Java web—Servlet过滤器(Filter)

    前言:         过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器:因此这篇blog来单独总结下关于过滤器的知识点. 一.首先来了解一下什么是过滤器: 下面这句话引 ...

  8. ITK:过滤器Filter和ParallelizeImageRegion比较

    ITK:过滤器Filter和ParallelizeImageRegion比较 内容提要 输出结果 C++实现代码 内容提要 本示例演示如何利用MultiThreaderBase :: Parallel ...

  9. ITK:复制过滤器filter

    ITK:复制过滤器filter 内容提要 输出结果 C++实现代码 内容提要 复制/复制过滤器 输出结果 2 C++实现代码 #include "itkAbsImageFilter.h&qu ...

最新文章

  1. mysql+br_mysql有哪几种索引
  2. 刷题总结——xor(ssoj)
  3. 原创 | 2020年Java程序员应该学习的10大技术
  4. android系统(63)---Jobscheduler运行机制详解
  5. siblings() 获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的。
  6. 一:学习Linux前准备工作
  7. 用c语言编写gps程序,GPS模拟C语言
  8. java车牌号识别EasyPR_EasyPR
  9. 厦门宏发有机器人_2020新版福建省厦门工业机器人工商企业公司名录名单黄页大全23家...
  10. Word使用中常用的快捷键
  11. vmware虚拟机设置静态ip地址
  12. springmvc+mybatis 无极限树形结构 Mapperxml 映射方法
  13. 洛谷 P2672 推销员 解题报告
  14. 802.11ac 速率 + 信道 + 国家码信道
  15. AI助力黑客,下一代防火墙将力不从心
  16. 计算机网络------虚拟局域网
  17. 爬虫----request简介(以及urllib模块和request模块保存图片区别)
  18. centos yum 安装jdk
  19. ubuntu16.04安装GTX-960M nvidia-384驱动
  20. 国外域名注册商选择_如何在2020年选择最佳域名注册商(比较)

热门文章

  1. 【高性能】Extreme交换机从头到尾配置
  2. ‘OpenThread”: undeclared identifier 问题的解决之道
  3. U3D游戏开发从入门到弯道超车(2):《Flappy Bird》场景动画及角色动画制作
  4. 让工作效率提升200%的9款外贸工具
  5. C++Builder 高级编程技巧
  6. C# String 的问题:immutable why? how? 传值?传引用?string/String? - 古道西风瘦马------尉迟方高声吟唱 - 博客园...
  7. 微软MS08-067漏洞,小白必看,超详细!!!
  8. MS08-067 漏洞复现报告
  9. strncpy函数详解看这一篇就够了-C语言(函数实现、使用用法举例、与strcpy的区别)
  10. 无法识别U盘的解决办法