【问题标题】:Where to iterate through JSON object在哪里迭代 JSON 对象
【发布时间】:2020-03-13 00:52:44
【问题描述】:

我正在使用 Angular 构建一些东西并使用

我的 对象包含具有特定值的对象。让我们假装:

name: "john",
sex: "m"
children: [
  {
  name: "joe",
  sex: "m"
  children: [
    {
    name: "mary",
    sex: "f"
    children: [
      {
      name: "ryan",
      sex: "m"
      children: []
      }
    ]
    }
  ]
],
name: "sue",
sex: "f"
children: [
  {
  name: "joe",
  sex: "m"
  children: [
    {
    name: "mary",
    sex: "f"
    children: [
      {
      name: "ryan",
      sex: "m"
      children: []
      }
    ]
    }
  ]
]

假设我想:

  1. 计算 john 的子孙总数。
  2. 数一数约翰有多少孙子孙女。

那么:

  1. 在使用 Angular/Redux 时,我应该在哪里编写函数?在获得状态之前我会这样做吗?在我进行 API 调用并获取我的状态之后?在减速机?在组件中?
  2. 迭代并获得我想要的这 2 个计数的最快/最佳方法是什么?因为我知道 Angular 有一些内置的东西,它会有更快的方法来做到这一点吗?还是通过普通的 JS?

最后一点:

  1. 假设我有一些兄弟组件(john 的妻子,sue)将使用这个类似的计数或信息。如果我想让我的代码保持干燥,我应该在哪里制作这些计数功能?

如果某些信息计数会有所不同,我是否会使用我之前的状态?可以说这只是计算女性儿童/孙女。 john's 是给男孩子/孙子的。

或者我应该为这些 (m & f) 制作两个状态片并处理它们?

File Structure:
app
 |store
   |actions
   |models
   |reducers
   |effects
 |views
   |john
     |.html
     |.ts
   |sue
     |.html
     |.ts
 |app.ts etc

【问题讨论】:

    标签: redux json angular redux ngrx angular-redux


    【解决方案1】:

    我觉得你的很多问题可以用selectors来回答。

    https://ngrx.io/guide/store/selectors

    1.) 您可以制作许多选择器。也许您可以制作一个选择器,该选择器接受名称(字符串)的输入,并可以为您提供它拥有的孩子的数量。还有一个选择器,可以为您提供此名称的孙子数量。然后,您可以将其组合到您的组件中。也许您可以制作一个同时计算两者的选择器。这取决于你。

    2.) 在 1 中回答。

    3.) 您可以将其写为可能在 store 文件夹内的 selectors.ts 中的选择器,然后可以在 store 的 select 参数中传递这些选择器函数。

    4.) 最快最好的方法是使用普通的 JS 或 lodash 之类的 JS 库。 Angular 内置了很多东西,但它是一个 UI/View 库,而不是一个让常见的 JavaScript 操作更快的库。

    5.) 我将拥有一个状态片段,就像前面提到的那样,使用选择器函数将状态转换为我感兴趣的数据。

    【讨论】:

    • 嘿!感谢您的答复。我刚刚做了一个编辑,我会先做男性,然后再做女性。 (我的实际项目的范围要大一些,我会多次分支)你还会有一个状态片并使用选择器函数吗?但无论哪种方式,我现在都会阅读选择器。非常感谢你的帮助! :)
    • 是的,我个人会。您可以将选择器视为getter 函数。
    • 谢谢。所以我有一堆不同的组件,每个组件可能使用 2-4 个不同的选择器,或者有时可能使用相同的选择器。你会为每个组件创建一个 component-name.selector 吗?或者只是一个大的通用选择器.ts?还有一个问题 - 我目前没有 index.ts。我刚刚在我的 app.module 中的 StoreModule.forRoot({}) 中添加了不同的减速器。这是不好的做法吗?
    • 查看 StoreModule.forFeature 以将每个特征缩减器注册为特征。我会将所有选择器函数放在 selectors.ts 中并导出它们,然后在必要时导入。
    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 2017-10-25
    • 2017-07-26
    • 2017-05-21
    • 2011-06-05
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多