Выбрать старый массив по ключу и переименовать ключ в новом массиве - Lodash - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть массив объектов. Я хочу pick массив на основе ключа viewerId и создать новый массив. Затем переименуйте ключ viewerId по имени userId

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/lodash@4.17.10/lodash.min.js"></script>

Я делаю это в два этапа. Можно ли это оптимизировать

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Вы можете сделать следующее в одном выражении:

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)

Это работает во всех браузерах ie9 и выше. Для получения дополнительной информации об используемой функции .map(), см. Это

0 голосов
/ 10 сентября 2018

Для этой цели использование map будет правильным способом обработки, так как вы преобразуете существующие данные.

Поэтому вам даже не нужно Лодаш .

Вы можете воспользоваться деструктуризацией и переименованием на одном шаге:

const result = viewerList.map(({ viewerId: userId }) => ({ userId }))
0 голосов
/ 10 сентября 2018

Вы можете использовать это

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

или в Лодаш

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