【问题标题】:ES6 get nested object in arrayES6 获取数组中的嵌套对象
【发布时间】:2018-03-19 15:09:21
【问题描述】:

如何找到嵌套在数组中的单个对象? 这是有效的代码。但是 [0] 返回 null 或空数组时并没有真正保存。

this.subscription = state.subscriptionsState.subscriptions
    .map(subs => subs.subscriptions.find(sub => sub.id === subscriptionId))[0];

有更好/更好的方法吗?

编辑: 输入数据:

state.subscriptionsState.subscriptions = [
    {
        "name": "name",
        "type": "type",
        "subscriptions": [{
            "id": 123456,
        }]
    }
]

【问题讨论】:

  • 您需要添加您的输入数据。
  • @NicholasKyriakides 完成。
  • .map()[0] 可以替换为.find()
  • @Troopers 不起作用,然后它返回“父”订阅。使用find 而不是map 我需要在“第二”find 中返回一个布尔值。

标签: javascript arrays ecmascript-6 find


【解决方案1】:

您可以reduce 将您的基础数组转换为仅包含订阅的一维数组。

从那时起,它就是一个简单的.find(),如果没有找到它,它会返回undefined,或者如果找到东西,它会返回subscription。

'use strict'

const items =[
  {
    "name": "name",
    "type": "type",
    "subscriptions": [{
      "id": 123456,
    }]
  }
]

const result = items
  .reduce((arr, item) => arr.concat(item.subscriptions), [])
  .find(sub => sub.id === 123456)

console.log(result)

如果基本数组为空,或者任何第一级项目subscriptionsArray 属性为空,这应该不会引发错误,它只会返回undefined。

【讨论】:

    【解决方案2】:

    如果你有 ES6,你可以使用destructuring assignment 来简化这个:

    const { subscriptionsState: { subscriptions } } = state
    
    this.subscription = subscriptions.find(s => s.id === subscriptionId)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 2018-01-12
      • 1970-01-01
      • 2019-06-16
      • 2013-10-11
      • 2021-11-29
      • 2016-07-23
      • 1970-01-01
      相关资源
      最近更新 更多