Lodash:如何在嵌套对象中使用过滤

Lodash 是一个流行的 JavaScript 工具库,提供了许多简化开发的实用函数。其中之一是 filter 函数,它可以帮助我们从一个数组或对象集合中筛选出符合条件的元素。但当遇到嵌套对象时,可能会出现一些困难。本文将介绍如何使用 Lodash 的 filter 函数在嵌套对象中进行过滤。

前置知识

在阅读本文之前,你需要了解以下概念:

  • JavaScript 对象和数组
  • Lodash 库及其基本用法
  • 箭头函数、对象解构和扩展运算符等 ES6+ 特性

案例说明

假设我们有一个包含用户信息的对象数组,每个对象包含以下属性:

----- ----- - -
  -
    --- --
    ----- --------
    ------ --------- --------
    -------- -
      ----- ---- ------
      ------ -----
      ---- -------
    -
  --
  -
    --- --
    ----- ------
    ------ ---------
    -------- -
      ----- ---- ---------
      ------ -----
      ---- -------
    -
  --
  -
    --- --
    ----- ----------
    ------ ---------
    -------- -
      ----- ----------
      ------ -----
      ---- -------
    -
  --
--

我们想要筛选出居住在纽约州(state: 'NY')且身份为管理员(roles 包含 'admin')的用户。如何使用 Lodash 的 filter 函数来实现这个过滤条件呢?

过滤嵌套对象

Lodash 的 filter 函数可以接受一个数组或对象集合,并返回符合条件的元素。我们可以使用箭头函数在回调函数中指定过滤条件。例如,要筛选出所有名字为 'Alice' 的用户,可以这样写:

----- ------------- - --------------- ---- -- --------- --- ---------

但是,当需要从嵌套对象中进行过滤时,如何访问子属性呢?Lodash 提供了多个辅助函数来解决这个问题。

_.get

_.get 函数可以帮助我们安全地访问嵌套属性。它接受两个参数:第一个参数是要访问的对象,第二个参数是属性路径,可以用点号或数组形式表示。如果属性不存在,则返回 undefined。

例如,要获取第一个用户的地址城市名称,可以这样写:

----- ---- - --------------- ----------------

如果要遍历所有用户并获取其地址城市名称,可以使用 mapget 函数组合起来实现:

----- ------ - -------------- -- ----------- -----------------

_.matches

_.matches 函数可以帮助我们创建一个断言函数,用于匹配对象是否符合指定的属性和值。它接受一个参数,即一个对象,其中每个属性都是要匹配的属性名称,对应的属性值为要匹配的值。返回的函数可以用作 filter 函数的回调函数。

例如,要筛选出所有状态为 'NY' 的用户,可以这样写:

----- ------------- - --------------- ----------- ---------------- ---- ----

_.overEvery 和 _.overSome

_.overEvery 函数可以帮助我们将多个断言函数组合成一个新函数,只有当所有断言函数都返回 true 时,整个函数才会返回 true。

_.overSome 函数与之相反,只要任何一个断言函数返回 true,整个函数就会返回 true。

例如

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/14551