ES6在数组中获取嵌套对象

时间:2018-03-19 15:09:21

标签: javascript arrays ecmascript-6 find

如何找到一个嵌套在数组中的单个对象? 这是有效的代码。但是[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,
        }]
    }
]

2 个答案:

答案 0 :(得分:2)

您可以reduce将Array基于仅包含订阅的1D数组。

从那时起,这是一个简单的.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)

如果基本数组为空,或者如果任何第一级项subscriptions Array属性为空,则不会抛出任何错误,它将返回undefined

答案 1 :(得分:0)

如果您有ES6:

,可以使用destructuring assignment来简化此操作
const { subscriptionsState: { subscriptions } } = state

this.subscription = subscriptions.find(s => s.id === subscriptionId)