JavaScript数组操作filter、find、some、reduce的区别在哪?
Admin 2021-10-18 群英技术资讯 1807 次浏览
这篇文章主要给大家介绍JavaScript数组操作filter、find、some、reduce的使用区别,对新手学习JavaScript数组操作有一定的帮助,下文有示例供大家参考,感兴趣的朋友就继续往下看吧。
Array.find 返回一个对象(第一个满足条件的对象)后停止遍历
const arrTest = [
{ id: 1, name: "a" },
{ id: 2, name: "b" },
{ id: 3, name: "b" },
{ id: 4, name: "c" }
]
// 过滤条件
function getName(val) {
return arrTest => arrTest.name === val
}
// 如果我们是想找到第一个满足条件的数据,应该使用`Array.find`
console.log(arrTest.find(getName("b")))
// { id: 2, name: "b" }
Array.some 返回是否满足条件的布尔值
const arrTest = [
{ id: 1, name: "a", status: "loading" },
{ id: 2, name: "b", status: "loading" },
{ id: 3, name: "b", status: "success" }
]
// 过滤条件
function getStatus(val) {
return arrTest => arrTest.status === val
}
// 如果我们需要查找一个数组中是否存在某个数据的时候,使用Array.some直接拿到结果
console.log(arrTest.some(getStatus("success")))
// true
Array.filter 遍历整个Array返回一个数组(包含所有满足条件的对象)
const arrTest = [
{ id: 1, name: "a", status: "loading" },
{ id: 2, name: "b", status: "loading" },
{ id: 3, name: "b", status: "success" }
]
// 过滤条件
function getStatus(val) {
return arrTest => arrTest.status === val
}
// 如果我们是需要过滤出一个数组中所有满足条件的数据,应该使用Array.filter
console.log(arrTest.filter(getStatus("loading")))
// [
// { id: 1, name: "a", status: "loading" },
// { id: 2, name: "b", status: "loading" }
// ]
Array.reduce 为数组的归并方法,使用场景很多,比如求和、求乘积,计次,去重,多维转一维,属性求和等...
本节示例主要实现Array.reduce对一组数据进行条件过滤后,返回一个新的数组
const arrTest = [
{ id: 1, status: "loading" },
{ id: 2, status: "loading" },
{ id: 3, status: "success" }
]
console.log(
arrTest.reduce((acc, character) => {
return character.status === "loading"
? acc.concat(
Object.assign({}, character, { color: "info" })
)
: acc
}, [])
)
// [
// { id: 1, status: "loading", color: "info" },
// { id: 2, status: "loading", color: "info" }
// ]
与Array.filter返回的数组的不同,filter返回的是原数组中符合条件的对象集合,filter与 Array.map 结合也可以实现上面的结果,为什么使用reduce更好呢?
// Array.map 和 Array.filter 组合
console.log(
arrTest
.filter(character => character.status === "loading")
.map(character =>
Object.assign({}, character, { color: "info" })
)
)
// [
// { id: 1, status: "loading", color: "info" },
// { id: 2, status: "loading", color: "info" }
// ]
结论:同时使用 Array.filter 和 Array.map 的时候,对整个数组循环了 2 遍。第一次是过滤返回一个新的数组,第二次通过 map 又构造一个新的数组。使用了两个数组方法,每一个方法都有各自的回调函数,而且 filter 返回的数组以后再也不会用到。
使用 Array.reduce 同样的结果,代码更优雅。
关于JavaScript数组操作filter、find、some、reduce的使用区别就介绍到这,。最后,想要了解更多JS数组操作,大家可以关注其它的相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了如何使用vue3打造一个物料库,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
本篇文章给大家带来了JavaScript中关于全局函数的相关知识,JavaScript中的全局函数有很多,下面我们一起来看一下应该怎样使用,希望对大家有帮助。
/***使用mongodb存储数据*1首先安装mongodbnodejs插件npminstallmongodb--save-dev*2安装express(非必须)***/varmongo=require("mongodb")varmongoClient=mongo.MongoClient;varurl="mongodb://
JavaScript相等判断的避坑实战指南 目录 JS中的相等性 1.严格相等(===) 2.非严格相等(抽象相等)(==) 3.同值相等 4.零值相等 Object.is()实现方案 总结 JS中的相等性 1.严格相等(===) 严格相等本质上是判断一个值是否与自身相等,在比较前不进行隐式类型转换.当被比较的两个值类型相同,值也相同,且不是Number类型时,这两个值是全等的.当两个值类型是Number时,我们需要注意NaN,NaN和NaN不相等,+0和-0全等,其余情况,只要值相等,就是全等的. NaN === NaN //false
这篇文章主要为大家详细介绍了vue实现手机验证码登录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008