JavaScript:通过键选择旧数组,然后在新数组中重命名键

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

我有一个对象数组,我想从键viewerId的值中“拾取”一个新的数组。我也想将viewerId键的名称更改为userId。这是我对lodash所做的事情:

const viewerList = [{
    "id": 1,
    "viewerId": 5,
    "status": true
  },
  {
    "id": 2,
    "viewerId": 8,
    "status": true
  },
  {
    "id": 3,
    "viewerId": 6,
    "status": true
  },
  {
    "id": 4,
    "viewerId": 9,
    "status": true
  }
]

var result = []
_.each(viewerList, (o) => {
  result.push(_.pick(o, 'viewerId'))
})

result = result.map(function(item) {
  return {
    userId: item.viewerId
  }
});

console.log(result)
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>

我分两步进行。可以优化吗?

javascript arrays lodash each
3个回答
2
投票

您可以在一个语句中执行以下操作:

const viewerList = [{
    "id": 1,
    "viewerId": 5,
    "status": true
  },
  {
    "id": 2,
    "viewerId": 8,
    "status": true
  },
  {
    "id": 3,
    "viewerId": 6,
    "status": true
  },
  {
    "id": 4,
    "viewerId": 9,
    "status": true
  }
]

// The same logic in a single statement
var result = viewerList.map(function(item) {
    return { userId : item.viewerId}
})

console.log(result)

此功能可在所有浏览器(即9及更高版本的浏览器上使用)有关正在使用的.map()功能的更多信息,请see this


2
投票

为此,在转换现有数据时,使用map是处理它的正确方法。

因此,您甚至不需要lodash

您可以在同一步骤中利用destructuringrenaming

const result = viewerList.map(({ viewerId: userId }) => ({ userId }))

1
投票

您可以使用此

viewerList.map(({viewerId}) => ({userId: viewerId}))

或lodash

_.map(viewerList, ({viewerId}) => ({userId: viewerId}))
© www.soinside.com 2019 - 2024. All rights reserved.