从数组中提取值

问题描述 投票:0回答:2

我有一个响应对象,我想提取所有

id
值,但我不确定最好的方法......

const obj = {
  "responseArray":[
    {
      "accounts":[
        {
          "products":[
            {
              "id":"123",
            }
          ]
        },
        {
          "products":[
            {
              "id":"456",
            }
          ]
        }
      ]
    },
    {
      "accounts":[
        {
          "products":[
            {
              "id":"987",
            }
          ]
        },
        {
          "products":[
            {
              "id":"654",
            }
          ]
        }
      ]
    }
  ]
}

我得到的最接近的是映射

const mapped = obj.responseArray.map(item => item?.accounts.map(acc => acc.products.map(prod => prod.id)))

// Response
// [ [ [Array], [Array] ], [ [Array], [Array] ] ]

这些

Array
位实际上包含了我想要的ID,只是显然不是我想要的格式......

javascript
2个回答
1
投票

您可以使用 flatMap 来获取一个简单的数组而不是数组的数组:

const obj = {
  "responseArray":[
    {
      "accounts":[
        {
          "products":[
            {
              "id":"123",
            }
          ]
        },
        {
          "products":[
            {
              "id":"456",
            }
          ]
        }
      ]
    },
    {
      "accounts":[
        {
          "products":[
            {
              "id":"987",
            }
          ]
        },
        {
          "products":[
            {
              "id":"654",
            }
          ]
        }
      ]
    }
  ]
}

const mapped = obj.responseArray.flatMap(item => item?.accounts.flatMap(acc => acc.products.map(prod => prod.id)))

console.log(mapped)


1
投票

使用“现代”(Chrome 69、Firefox 62、Edge 79、Opera 56、Safari 12)版本的 JavaScript,您可以

Array.prototype.flatMap
:

obj.responseArray
  .flatMap(x => x.accounts)
  .flatMap(x => x.products)
  .map(x => x.id)
// [ '123', '456', '987', '654' ]

flatMap
接受一个返回数组的函数,并将该函数的所有数组映射到一个大数组中,然后可以进一步处理该数组。

© www.soinside.com 2019 - 2024. All rights reserved.