ES5的filter方法,你真的会用吗?

Elasticsearch Filter 查询详解 本文介绍了Elasticsearch中Filter查询的核心概念与应用。Filter查询不计算相关性分数且支持缓存,适用于精确匹配、范围查询等场景,性能优于Query查询。文章详细讲解了两种主要用法:post_filter和bool中的filter子句,并针对文本字段精确匹配(如大小写问题)和null值处理等常见问题提供了解决方案。最后对比了Filter与Query的适用场景,建议精确匹配使用Filter,全文搜索使用Query,并合理利用Filter缓存提升性能。通过正确使用Filter查询,可以显著优化 阅读详情

前言:2018/1/18 12:24 第一次在掘金发表文章,收获这么多赞挺意外的,感谢大家赏脸[拜谢]。因工作繁忙,本周有空会继续补充更新该文章的,喜欢的可以通过点赞或收藏跟进动态啦。再次感谢[鞠躬]~!

1/19 18:35 更新:

  • 1.评论区老铁们说的数组去重的set的实现模式,字符串去重;
  • 2.增加filter map搭配使用的场景引入(其实我想说的重点是这个[捂脸]);
  • 3.滋润下文字表达,增加一些必要的注释说明;
  • 4.排版重构

filter

1.定义

filter 为数组中的每个元素调用一次 callback 函数,并利用所有使得" callback 返回 true 或 等价于 true 的值 的元素"创建一个新数组。

var new_array = arr.filter(callback[, thisArg])

2.基础用法

var spread = [12, 5, 8, 130, 44]
// 筛选条件符合大于10的新数组
var filtered = spread.filter(n => n >= 10)
console.log('filtered', filtered) // => [12, 130, 44]

3.进阶用法

数组对象的键名/键值的搜索

var users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'fred',   'age': 40, 'active': false },
  { 'user': 'ared',   'age': 24, 'active': false },
  { 'user': 'ered',   'age': 80, 'active': false },
  { 'abc': 'ered',   'age': 80, 'active': false }
]
// 筛选 age等于40或者age等于24的 数组对象
var filtered = users.filter(n => n.age===40 || n.age===24)
console.log('filter后的键名', filtered)   // => [{user: "fred", age: 40, active: false},{user: "ared", age: 24, active: false}]

4.高阶用法

4.1 数组去重

var spread = [12, 5, 8, 8, 130, 44,130]
var filtered = spread.filter((item, idx, arr) => {
  return arr.indexOf(item) === idx;
})
// 筛选符合条件找到的第一个索引值等于当前索引值的数组
console.log('数组去重结果', filtered)

感谢评论区@缘童鞋等老铁分享想法,数组去重用ES6的set方法的实现模式

var spread = [12, 5, 8, 8, 130, 44,130]
var setFun = [...new Set(spread)]
console.log('数组去重结果', setFun)

感谢评论区@菜鸟_it_老铁分享的字符串去重,大家可以参考一下

var arr=[12, 5, 8, 8, 130, 44,130,'a','b','a']
var obj={};
arr.forEach(function(item){
obj[item]=item;
})
Object.keys(obj)
console.log(Object.keys(obj))

大家讨论对于数组去重讨论还是蛮激烈的。因此,18岁的我,建了一个供大家交流的群,对于代码的实现逻辑的优化,大家可以加文章底部下面的微信群,以后可能会组织线下活动以及程序员的单身趴吧,哈哈~~代码的世界很精彩,一起成长.

4.2 数组中的空字符串删掉

var spread = ['A', '', 'B', null, undefined, 'C', '  ']
var filtered = spread.filter((item, idx, arr) => {
  return item && item.trim()
})
console.log('数组中的空字符串删掉', filtered) // => ["A", "B", "C"]

5.一句话总结

充分利用callback返回true的特点当作"过滤条件"函数,生产新的数组

6.项目实践

filter的常用搭配

filter与map配合:用filter符合一定条件过滤后再进行map生成新的数组

在项目中,有时候我们需要在将原数组根据一定条件过滤后再进行map生成新的数据

for continue 写法

var arr = [{
  gender: 'man',
  name: 'john'
}, {
  gender: 'woman',
  name: 'mark'
}, {
  gender: 'man',
  name: 'jerry'
}]
var forArr = []
for (var i = 0; i < arr.length; i  ) {
    // 遇到性别为女的数组对象, 跳出本次循环
    if (arr[i].gender === 'woman') continue
    var temp = {
      name: arr[i].name
    }
    forArr.push(temp)
}
// 过滤掉性别为女的数组对象
console.log('男性名字集合', forArr) // => [{name: 'john'}, {name: 'jerry'}]

用for continue方法后,我们成功将遇到性别为女的数组对象剔除掉了,最终筛选出男性名字的数组集合。for循环如果遇到多层嵌套是比较冗杂且不易维护的。我们能不能用map代替呢?但是map不支持continue跳出循环。

问题: 那又想用map减少代码量,又想用continue跳出循环,怎么办?

解决:或许用filter与map的搭配使用可以解决我们遇到的问题(可代替for continue 的使用)

代码演示: filter map 写法

var arr = [{
  gender: 'man',
  name: 'john'
}, {
  gender: 'woman',
  name: 'mark'
}, {
  gender: 'man',
  name: 'jerry'
}]
// filter : 有条件的筛选,返回条件为true的数组
// 筛选出性别为男性的名字集合
var newArr = arr.filter(n => n.gender === 'man').map(item => {
  return {
    name: item.name
  }
})
console.log('男性名字集合', newArr)   // => [{name: 'john'}, {name: 'jerry'}]

用filter map 写法方法后,我们简简单单用两三行代码就实现出了用for continue写法的功能。既优雅又易读易维护,何乐而不为呢?

that's all, 以上就是我的个人的经验总结,如果对你的开发有帮助,欢迎点赞,如果觉得哪里出错了,欢迎指出,大家一起进步,共同成长~。~

一起交流?

你有好的想法可以一起交流,订阅微信公众号yhzg_gz(点击复制,在微信中添加公众号粘贴即可),追求代码质量,高效率编程是我们共同的目标。

付出的前端路

写文章可以得异步社区的书!爱读书的技术人都在异步社区。我想要读编写可维护的JavaScript,希望你也能够喜欢。

数字IC后端PPA优化实战:Innovus中Timing一致性策略与Module Region布局技巧 本文深入探讨了数字IC后端设计中PPA优化的核心挑战,重点解析了Innovus与PrimeTime之间Timing不一致的根本原因。通过实战案例,详细介绍了在Innovus中设置Timing Margin、Derate以及RC Scale Factor等关键策略,以校准时序视图。同时,文章分享了利用Module Region进行物理布局规划的技巧,将关键模块约束在最优区域,并结合Group Path等进阶方法,有效提升时序收敛效率与PPA结果的可预测性。 阅读详情

相关推荐

wps脚注转参考文献格式

用于写论文时直接将规范的脚注格式转为参考文献格式

Zeaf的博客 1556

JS高级02:ES5数组新增方法、函数、闭包

ES5数组新增了filter、map、some、every这几个方法。

Java修炼者的博客 1023

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1613

es5数组拓展,Filter过滤方法

Filter方法详解: array.filter(function(currentValue,index,arr), thisValue);该方法与forEach()类似,也是接受两个参数,一个是数组中每个元素调用的函数,另一个是该函数内的this指向,如果不传默认是window,传指了就指向该值。但也forEach()不同的是,函数需要返回true/false来过滤数组,将是true的元素拿出...

滕安超的博客 1636

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1601

【提示学习代码】CoOp代码详读

CoOp是对CLIP的改进工作,主要是对prompt进行学习从而不用来手动设置prompt。自定义CLIP模型:上述两个模块结合而成的CLIP。文本编码器,接收文本的输入,并输出相应的编码表示。将图像和文本进行编码并计算它们之间的相似性。permute后变成了(4,2,3)Prompt学习器,用于学习生成提示。

weixin_51293984的博客 5816

ES5中的新增方法

3. ES5中的新增方法 3.2 数组方法 迭代(遍历)方法:forEach()、map()、filter()、some()、every() array.forEach(function(currentValue,index,arr){ }) currentValue:数组当前项的值 index:数组当前项的索引 arr:数组对象本身 1.forEach <script> // forEach 迭代(遍历) 数组 var arr = [1,.

m0_45659764的博客 446

RTKLIB中RTK定位原理(一)

1 模型 1.1 非差观测值 非差观测值与RTKLIB中PPP定位原理——观测模型部分中一致。 1.2 单间单差观测值 若两个接收机距离较近,经过站间单差,电离层对流层延迟可消除,卫星s的钟差以及初始相位被消除,中依然包含接收机初始相位。 1.3 站间星间双差观测值 经过站间星间双差,接收机钟差及初始相位被消除。 2 EKF参数估计 2.1 EKF法则 EKF法则与RTKLIB中PPP定位原理——观测模型部分中一致。 2.2 状态变量与时间更新 (1)状态变量 在RTK...

papunzal的博客 3817

【ES5】 新增方法概述 —— forEach() - filter() - some() - map() - trim() - Object.defineProperty()

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、数组方法1.forEach1.1 写法1.2 特点1.3 案例2. filter2.1 写法2.2 特点2.3 案例3. some3.1 写法3.2 特点3.3 案例3.4 filter与some的区别4. map4.1 写法4.2 特点4.3 案例二、字符串方法1. trim1.1 写法1.2 特点1.3 案例三、对象方法Object.defineProperty()写法案例1案例2总结 前言 ES5中给我们新增了一些方

weixin_60297362的博客 881

JS+H5打字练习器

实现功能 1.导入.TXT文件到打字练习内容(部分浏览器可能出于安全问题限制了这一步操作) 2.输入文本到打字练习内(弹出输入框,将要练习的内容输入至输入框) 3. 开始练习,并根据正误在打字练习内容文本上修改颜色(某个字正确显示绿色,某个字错误,显示红色,某个字没有打显示灰色) 4.开始练习、结束练习,全部输入完成后自动结束练习,也可提前手动结束练习,结束练习后弹窗用显示时和正确率。(区别在于一个全部输入完成且全部正确,一个提前结束无其他条件) 效果图 分析 HTML 结构解析 根元素:<!DO

w11111xxxl的博客 1414

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ES5-ES6中数组方法使用详解

Array 对象属性 constructor 返回对创建此对象的数组函数的引用。 length 设置或返回数组中元素的数目。 prototype 使您有能力向对象添加属性和方法。 传统Array 对象方法 toSource() 返回该对象的源代码。 toString() 把数组转换为字符串,并返回结果。 toLocaleString() 把数组转换为本地数组,并返回结果。 valueOf() 返回数组对象的原始值 修改原数组 不修改原数组 push, pop concat

JackieDYH的博客 1538

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JavaScript ES6 Array.filter()方法总结

本篇文章参考以下博文 Array.prototype.filter() 文章目录一、定义二、语法 一、定义    filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。    filter 的中文意思是“筛选”,顾名思义,会对数组中的元素挨个进行检查,检查通过的,才能组成新的数组,返回出去。 二、语法 var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])   

不见浅诗的博客 1752

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ES5与ES6数组方法总结

Array 对象属性 constructor 返回对创建此对象的数组函数的引用。 length 设置或返回数组中元素的数目。 prototype 使您有能力向对象添加属性和方法。 传统Array 对象方法 toSource() 返回该对象的源代码。 toString() 把数组转换为字符串,并返回结果。 toLocaleString() 把数组转换为本地数组,并返回结果。 valueOf() 返回数组对象的原始值 修改原数组 不修改原数组 push, pop concat

突维 977

ES5数组对象的forEach, map, filter方法

很早的事了。 ES5中数组新增了几种方法,参考:http://www.zhangxinxu.com/wordpress/2013/04/es5%E6%96%B0%E5%A2%9E%E6%95%B0%E7%BB%84%E6%96%B9%E6%B3%95/#filter其中forEach, map, filter用法类似,总结下异同。forEach 用法:forEach() 方法对数组的每个元素执行

justforuse的博客 1043

ES5中数组的方法

** ES5中数组的方法 ** ES5中数组的方法都有: indexOf、forEach、map、every、some、filter、reduce 一、indexOf方法 查找数组内指定元素的位置,查到第一个值时返回其索引,没查到返回-1 .lastIndexOf(element)为倒序查找 二、forEach方法 遍历当前数组,参数为一个回调函数,回调有三个值: 1、当前元素 2、当前元素索引值 3、整个数组 .forEach(function(e,index,arr){}); 三、map

FengYang_的博客 1606

ES5数组的高阶方法

ES5数组的高阶方法 forEach 遍历 var arr = ["good", "luck", "hello", "world"]; //=============forEach方法 var a = arr.forEach(function(item, index, self) { console.log(item); //数组的每一个值 console.log(index); //下标值 console.log(self); // 数组本身 }) ma

wb199811的博客 3628

es6 去掉空格_es6 filter() 数组过滤方法总结

Array.every(x=>x)是每一个都要满足Array.some(x=>x)是有一个满足。Array.find(findIndex),返回符合条件的第一个值。Array.filter(过滤成新的数组)数组的方法分为两类1)改变原数组push,pop,shift,unshift,sort,reverse,splice2)不改变原数组concat,join-->split,to...

weixin_39606137的博客 4667

Js语法:filter 你真的会用了吗?

Js语法:filter 你真的会用了吗?

weixin_58340013的博客 1776

ES5中forEach、map 、filter对比

ES5中forEach、map 、filter对比 forEach foreach方法用于循环遍历数组 var arr = [1,4,3,2,6,3,2,2,4,8] // 值 下标 arr.forEach(function(item,index){E console.log(item,index) }) ...

Xyp9x的博客 763

Elasticsearch filter context 的实践案例

也可以通过简单安装一个 INFINI Console(https://docs.infinilabs.com/console/main/docs/getting-started/install/) 进行图表监控(在监控图表-索引-advance 中)因此这里的 must 查询也达到 filter 查询使用 querycache 的优势。第一个案例,我们选择一个 range date 的条件进行测试环境测试,将其中 must 条件改成 filter 条件,测试 5 次以上,观测其缓存数据。

infinilabs的博客 609

【ES5和ES6】数组遍历的各种方法集合

ES5和ES6 遍历数组的方法集合

m0_37616866的博客 1616

ES5提供的数组方法

ES5提供的数组方法 ES5为我们提供了很多操作数组的方法,便于我们对数组进行一些基础的便携操作,接下来我们来详细聊聊ES5里面的那些数组方法 首先我们自行来封装一个数组函数,首先说明我们使用的参数以及它们所代表的意义(item数组项内容,index数组下标,arr数组) 上代码 //定义一个函数forEach function forEach(arr , fn){ for(var i =...

qq_41583484的博客 215

ES5中新增的数组方法forEach()、filter()、some()

主要

Var-al 的博客 275

ES5常用的数组方法总结

ECMAScript 5中对Array中新增了9个方法: 5个迭代方法(循环操作数组中的各个项):forEach(),map(),filter(),every()和some() 2个归并方法(迭代数组所有项,最终返回一个值):reduce()和reduceRight() 2个索引方法:indexOf() 和 lastIndexOf(); 一、forEach()方法 跟之前的for()循环一样,只是forEach更灵活 遍历当前数组,参数为一个回调函数,回调有三个值: 1.e当前元素, 2. index当

zzDAYTOY的博客 1337
上一篇: 做前端也有“捷径”,科学偷懒大法了解一下!
下一篇: mpvue开发小程序所遇问题及h5转化方案
「已注销」
博客等级 码龄14年 16粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值