【问题标题】:How to join javascript array elements without forloop如何在没有for循环的情况下加入javascript数组元素
【发布时间】:2022-01-12 09:43:15
【问题描述】:

我有一个来自猫鼬的查询结果:

{
    "store": [
        {
            "items": [
                "A1",
                "A2"
            ]
        },
        {
            "items": [
                "A3",
                "A4"
            ]
        },
        {
            "items": [
                "B1",
                "B2"
            ]
        },
        {
            "items": [
                "B3",
                "B4"
            ]
        },
        {
            "items": [
                "C8",
                "C9",
                "C10"
            ]
        }
    ]
}

我需要这个:["A1","A2","A3","A4","B1","B2","B3","B4","C8","C9",C10] 有没有办法在不使用 foreach 循环的情况下做到这一点,因为我的数组会很长而且很耗时。

【问题讨论】:

  • 试试:让 result = data['store'].flatMap(value => value.items)
  • 如果您想获得更快的性能,请查看我的聚合选项以满足您的要求,这样您就不必使用 JavaScript 代码了!

标签: javascript arrays mongoose


【解决方案1】:

let data = {
  'store': [
    {
      'items': [
        'A1',
        'A2'
      ]
    },
    {
      'items': [
        'A3',
        'A4'
      ]
    },
    {
      'items': [
        'B1',
        'B2'
      ]
    },
    {
      'items': [
        'B3',
        'B4'
      ]
    },
    {
      'items': [
        'C8',
        'C9',
        'C10'
      ]
    }
  ]
}

let result = data['store'].flatMap(value => value.items)

console.log(result)

【讨论】:

    【解决方案2】:

    为了进一步提高性能,您可以直接使用聚合来利用数据库中更快的 C++ 性能:

    我假设您的数据库文档如下所示:

    如果你使用这样的聚合:

    let result = Model.aggregate([
      {'$match':{'_id': "YourDesiredId"}}, // Add this line in case you want to match a specific document
      {
        '$unwind': {
          'path': '$store'
        }
      }, {
        '$unwind': {
          'path': '$store.items'
        }
      }, {
        '$group': {
          '_id': '$_id', 
          'items': {
            '$push': '$store.items'
          }
        }
      }, {
        '$project': {
          '_id': 0
        }
      }
    ])
    

    您的输出将是:

    items:["A1","A2","A3","A4","B1","B2","B3","B4","C8","C9","C10"]
    

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 1970-01-01
      • 2021-11-18
      • 2021-01-29
      • 1970-01-01
      • 2014-05-26
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多