Lodash 在同一对象的关键部分下移动对象

Lodash move objects under a key part of same object

我有一个 JSON 对象

datas = [ 
    {"id":1,"name":"Test","age":24}, 
    {"id":2,"name":"Test1","age": 30}
]

我想像下面那样修改 JSON 对象

datas = [ 
        {"1":{"name":"Test","age":24}}, 
        {"2":{"name":"Test1","age": 30}}
    ]

我想用 lodash 做同样的事情。我可以理解 map 而不是 data 并创建一个新对象应该解决这个问题

updated_data=[]
_.map datas, (data) ->
  Obj = {}
  Obj[data.id] = data
  updated_data.push(Obj) 

但我正在寻找 lodash 实现相同目标的方法。

Array.map()(或_.map())用于解构和对象剩余(...):

const datas = [{"id":1,"name":"Test","age":24}, {"id":2,"name":"Test1","age": 30}]

const result = datas.map(({ id, ...o }) => ({ [id]: o }))

console.log(result)

使用 lodash 你可以做同样的事情,但不是解构,而是使用 _.omit() 从原始对象中删除 id,然后使用 _.zipObject() 将其与 id:

const datas = [{"id":1,"name":"Test","age":24}, {"id":2,"name":"Test1","age": 30}]

const result = _.map(datas, o => _.zipObject([o.id], [ _.omit(o, 'id')]))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

我认为您不需要为此使用额外的库。这样你就可以达到想要的效果:

datas.map((item) => {
  const { id, ...rest } = item;
  return {
    id: rest,
  };
});