js 数组 find,some,filter,reduce区别详解

 更新时间:2021年06月15日 11:40:39   作者:Regina  
区分清楚Array中filter、find、some、reduce这几个方法的区别,根据它们的使用场景更好的应用在日常编码中。具有一定的参考价值,感兴趣的小伙伴们可以参考一下

区分清楚Array中filter、find、some、reduce这几个方法的区别,根据它们的使用场景更好的应用在日常编码中。

Array.find

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

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.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 为数组的归并方法,使用场景很多,比如求和、求乘积,计次,去重,多维转一维,属性求和等...
本节示例主要实现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 同样的结果,代码更优雅。

到此这篇关于js 数组 find,some,filter,reduce区别详解的文章就介绍到这了,更多相关js 数组 find,some,filter,reduce内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于jstree使用AJAX请求获取数据形成树

    基于jstree使用AJAX请求获取数据形成树

    这篇文章主要为大家详细介绍了基于jstree使用AJAX请求获取数据形成树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Js base64 加密解密介绍

    Js base64 加密解密介绍

    想必大家对base64并不陌生吧,在本文将为大家介绍下Js中的base64加密解密过程,感兴趣的朋友不要错过
    2013-10-10
  • javascript中字体浮动效果的简单实例演示

    javascript中字体浮动效果的简单实例演示

    这篇文章主要介绍了javascript中字体浮动效果的简单实例演示,在一些网站上经常遇到当鼠标移导航栏的时候,能够使其弹出下拉选项,现在就演示一下这种功能,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • JS通过位运算实现权限加解密

    JS通过位运算实现权限加解密

    这篇文章主要介绍了JS通过位运算实现权限加解密的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-08-08
  • js运动事件函数详解

    js运动事件函数详解

    这篇文章主要为大家详细介绍了JavaScript运动事件函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 小程序的上传文件接口的注意要点解析

    小程序的上传文件接口的注意要点解析

    这篇文章主要介绍了小程序的上传文件接口的注意解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • json与jsonp知识小结(推荐)

    json与jsonp知识小结(推荐)

    这篇文章主要介绍了json与jsonp知识小结(推荐)的相关资料,需要的朋友可以参考下
    2016-08-08
  • JS实现吸顶特效

    JS实现吸顶特效

    这篇文章主要为大家详细介绍了JS实现吸顶特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • javascript实现输入框内容提示及隐藏功能

    javascript实现输入框内容提示及隐藏功能

    这篇文章主要介绍了javascript实现输入框内容提示及隐藏功能,实现方法真的超简单,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • 微信小程序链接传参并跳转新页面

    微信小程序链接传参并跳转新页面

    这篇文章主要介绍了微信小程序链接传参并跳转新页面的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11

最新评论