·

JS 数组中的 filter 方法

发布时间:2024-08-29 16:20:14阅读量:101
专业文章
转载请注明来源

1、定义

filter()创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

2、语法

array.filter(function(currentValue,index,arr), thisValue);

3、参数说明

返回

4、用法

filter() 方法用于把Array中的某些元素过滤掉,然后返回剩下的未被过滤掉的元素。

5、注意事项

1、filter() 不会对空数组进行检测;
2、filter() 不会改变原始数组。

6、使用实例

1.返回数组array中所有元素都大于等于14的元素、返回等于14、返回大于某个值和小于某个值的元素的元素。

const array = [14, 17, 18, 32, 33, 16, 40];
const newArr = array.filter(num => num > 14)
console.log(newArr);//打印 [17,18,32,33,16,40]
 
// 查找某个值-------------------------
const array = [14, 17, 18, 32, 33, 16, 40];
const newArr = array.filter(num => num == 14)
console.log(newArr);//打印 [14]
 
//返回大于某个值和小于某个值的元素
const array = [14, 17, 18, 32, 33, 16, 40];
const newArr = array.filter(num => num > 14 && num < 33)
console.log(newArr);//打印 [17, 18, 32, 16]

2.数组去重操作:对数组array中所有相同的元素进行去重复操作。

const array = [2, 2, 'a', 'a', true, true, 15, 17]
const newArr = array.filter((item, i, arr) => {
      return arr.indexOf(item) === i
    })
console.log(newArr);//打印 [2, 'a', true, 15, 17]
 
//-------------------------------------------------------------------------
 
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 9,]
const newArr = array.filter((item, i, arr) => {
      return arr.indexOf(item) === i
    })
console.log(newArr);// 打印 [1, 2, 3, 4, 5, 6, 7, 8, 9]

3、数组中保留奇数或者偶数。

//保留偶数----------------------------------------
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const newArr = array.filter((item, i, arr) => {
      return item % 2 === 0
    })
console.log(newArr);// 打印 [2, 4, 6, 8, 10]
 
//保留奇数----------------------------------------
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const newArr = array.filter((item, i, arr) => {
      return item % 2 !== 0
    })
console.log(newArr);// 打印 [1, 3, 5, 7, 9]

4、去掉数组中的假值,比如:空字符串、undefined、null、0、false。

const array = [
      { id: 3 },
      { id: 4 },
      { id: null },
      { id: undefined },
      { id: '' },
      { id: 0 },
      { id: false }
     ]
const newArr = array.filter(({ id }) => id)
console.log(newArr);// 打印 [{ "id": 3 },{ "id": 4 }]
 
//-------------------------------------------------------------------
 
const array = [undefined, null, 3, 5, 'a', false, 0]
const newArr = array.filter(item => item)
console.log(newArr);// 打印 [3, 5, 'a']

5、把对象数组array中的某个属性值取出来存到数组newArr中。

const array = [
  { name: "a", type: "letter" },
  { name: '1', type: "digital" },
  { name: 'c', type: "letter" },
  { name: '2', type: "digital" },
];
const newArr = array.filter((item, i, arr) => {
  return item.type === "letter"
})
console.log(newArr);
// 打印 [{ "name": "a", "type": "letter" }, { "name": "c", "type":"letter" }]

6、filter结合find方法,实现两个数组的补集的解决方法,oldArr的元素newArr中都有,在newArr中去掉所有的oldArr。

find() 方法返回数组中满足提供的测试函数的第一个元素的值。这里有四个元素,那么就会返回两个数组元素相等的值,这里取反就返回不相等的值, 不取反的时候因为30的元素不符合,所以不返回30的值。
const array = [32, 4, 11, 55, 46, 99, 104, 54, 16, 33, 78, 43, 40]
const oldArr = [32, 33, 16, 40, 30]
function myfunction() {
  const result = array.filter(item1 => {
    //此处取反去掉,将变换元素状态
    return !oldArr.find(item2 => {
      return item1 === item2
    })
  })
  return result
}
const newArr = myfunction()
console.log(newArr);
// 取反打印 [4, 11, 55, 46, 99, 104, 54, 78, 43]
// 不取反打印 [32, 16, 33, 40]   此处30的元素不符合,所以不返回30的值


原文链接:https://blog.csdn.net/a15220216758/article/details/124993673

评论区

暂无评论,来发布第一条评论吧!

弦圈热门内容

正弦函数的幂级数展开是否是柯西序列?

考虑正弦函数的幂级数展开$$S=(\sum_{i=0}^{j}\frac{(-1)^{i}}{(2i+1)!}r^{2i+1})_{i\in\mathbb{N}}, 0\leq r\leq2\pi。$$那么$S$是否是柯西序列?令$\varepsilon&gt;0$。是否存在$N&gt;0$使得对于任意$m,n\geq N$,都有$$\left|\sum_{j=n}^{m}\frac{(-1)^{j}}{(2j+1)!}r^{2j+1}\right|\leq\sum_{j=n}^{m}\frac{1}{(2j+1)!}r^{2j+1}&lt;\varepsilon?$$证明1:众所周知,$\sin x$的幂级数展开在任意地方都是收敛的(你可以使用比值审敛法来证明这个结论),然后所有收敛数列都是柯西的,因此$S$是柯西序列。证明2:既然这是研究一个紧致集里的级数,最简单的方法是用下面的不等式:$$\sum_{j=n}^{m}\frac{1}{(2j+1)!}r^{2j+1}\leq\sum_{j=n}^{m}\frac{1}{(2j+1)!}(2\pi)^{2j+1}&lt;\varep ...

阿基米德性质的乘法形式

我的提问:令$(\Gamma,+,\leq)$为一个有序阿贝尔群。我们知道阿基米德性质可以表述为:对所有$a,b\in\Gamma$,如果$a&gt;0,b\geq0$,则存在$n\geq0$使得$b\leq na$。然而如果我们考虑乘法的情况,即有序阿贝尔群是$(\Gamma,\cdot,\leq)$。是否存在乘法形式的阿基米德性质?我认为存在。并且我对它的描述如下:对于所有$a,b\in\Gamma$,如果$b&lt;1,a\leq1$,则存在$n\geq0$使得$b^{n}\leq a$。这是正确的吗?实际上,我没能证明它等价于$\Gamma$有凸秩1。回答:你正确地叙述了阿基米德性质的乘法版本。令$\Gamma$为一个满足阿基米德性质的有序乘法群。假设$H$是$\Gamma$的一个凸子群,且满足$H\ne \{1\}$。令$1\ne x\in H$。然后有$\{x,x^{-1}\}\subset H$,且$\{x,x^{-1}\}$中的一个成员是$&gt;1$。因此,不失一般性,令$1&lt;x\in H$。(i). 如果$1\le y\in\Gamma$,存在$n\in \B ...

高智商与心理疾病仅“一墙之隔”?

“从天才到疯子,仅有一步之遥。”这是英国诗人约翰·德莱顿的一句名言。世界上许多有才华的人都与精神疾病沾边,这让科学家对这个问题很有兴趣。一直以来,他们都想找到一个答案,高智商与心理疾病之间是否存在一定的相关性?最近,克里蒙特学院联盟培泽学院的科学家在心理学期刊Intelligent发表了一项研究成果,他们发现,高智商人群罹患焦虑、抑郁、自闭等症状的比例要高于普通大众。高智商与精神疾病这项研究的样本比较特别,培泽学院的科学家选择了3715名门萨俱乐部成员,测试他们的精神健康。门萨俱乐部是世界顶级智商社团组织,目前它的会员遍及全球100多个国家和地区,人数高达十几万,智商均在130以上。但是,测试结果显示,其中约有20%的会员患有抑郁症和焦虑症,而在普通人群中,这一比例只有10%。不仅如此,他们还发现,门萨会员似乎也更容易患哮喘、过敏和免疫力底下等疾病。他们试图回答一个问题,高智商是否会加剧心理反应进而影响身体的免疫水平?根据《每日邮报》的报道,研究人员的解释是,高智商人群之所以患精神疾病的比例更高,也许是因为他们过于亢奋、敏感,导致情绪失调。而已有的科学研究认为,心理问题可能引发身体的炎 ...

吴宝珠:不要浪费时间写糟糕的论文,一篇好论文胜过一百篇垃圾论文

吴宝珠1972年出生于越南一个学者家庭,15岁时进入越南国立河内大学附属高中的数学专修班,1988年和1989年,他连续两届参加国际奥林匹克数学竞赛,获两枚金牌。他在法国完成大学学习,在博士研究生阶段开始研究朗兰兹纲领;2008年,他证明了朗兰兹纲领的基本引理。朗兰兹纲领由加拿大裔美国数学家罗伯特·朗兰兹(Robert Langlands)发起。1979年,朗兰兹提出一项雄心勃勃的革命性理论:将数学中两大分支——数论和表示论联系起来,其中包含一系列的猜想和洞见,最终发展出“朗兰兹纲领”。朗兰兹认为,纲领的证明需要几代人的努力,但他相信证明纲领的前提需要一个基石——基本引理,而且这个证明应该比较容易。然而,基本引理的证明实在是太难了,直到29年后,2008年,年轻的吴宝珠才用自己天才的方法,将之证明。2009年,美国《时代》周刊将基本引理的证明列为年度十大科学发现之一。2010年9月1日,吴宝珠成为美国芝加哥大学的正教授。前段时间,应哈佛大学数学教授、清华大学数学科学中心主任丘成桐邀请,吴宝珠到北京作为期一周的学术访问,其间,他接受了《科学时报》记者采访,谈及自己的数学之路。在越南展露数 ...

说过多少遍不要All in AI!初创公司没有一个产生现金流的业务就搞AI无异于在裸泳

这段时间是AI大火的时期,企业之间大模型的竞争已经进入白热化阶段,很多初创公司也相继涌入了AI大模型赛道。不少人争相加入AI赛道的原因,是相信,这将会是一场新的工业革命,或者说这相当于上次的互联网革命。这里我并不否认这种观点,而是想指出,现在没人真的能确定这场AI大热是否真的能产生堪比工业革命的收益。如果商业化落地成功,且能满足大量的市场需求从而能产生大量的利润,才能说这或许是一场工业革命。而且换位思考一下,如果你确定这是次巨大的机缘,那为什么要公之于众呢?不仅公之于众还要大肆宣扬,生怕有人不知道,这正常吗?是不是跟股市一样,大喊着“牛市”了,要涨了,然后一堆韭菜入局。目前来看,AI的局势还处在混沌摸索之中,绝大多数人的钱注定会打水漂,已经有大量的AI公司倒下了。讽刺的是,有些通过AI热赚到钱的,反而是卖课割韭菜的。然后关于目前的行情,从明星AI创业公司的动向,也能看出一二,不少明星创业公司选择卖身,或者创始团队分崩离析,还有创始人流下烂摊子直接跑路的。就连最大的OpenAI如今创始人团队都走光了。连明星创业公司都如此,如果你这时候选择All in AI,你想想那失败的风险有多大,就跟 ...