将对象数组转换为Map Immutable.js

Cub*_*be3 2 javascript reactjs immutable.js

我有一个对象数组,我希望将其转换为一个简单的Immutable地图:

name: {
  urlname
  id
}
Run Code Online (Sandbox Code Playgroud)

目前我正在做以下data对象数组:

data = data.map((data) => ({
  name: data.name,
  urlName: data.urlName,
  id: data.id
}))
Run Code Online (Sandbox Code Playgroud)

我想要转换的是以下(data):

[{"id":"10","name":"Dave","urlName":"foo-bar","order":"-100","classId":"12","className":"David","classUrlName":"david-foo-bar"}]
Run Code Online (Sandbox Code Playgroud)

如上所述,我希望将名称作为键,并将urlName和id作为键的值(如果可能).我想循环数据,直到所有内容都减少到该结构,如果可能的话.

Bam*_*ieh 6

由于您希望将数据从形状转换为形状,因此可以使用reduce函数执行此任务.

reduce函数将数据转换为Map每个键为a的位置name,值为idurlName

const sample = [{"id":"10","name":"Dave","urlName":"foo-bar","order":"-100","classId":"12","className":"David","classUrlName":"david-foo-bar"}];

const result = sample.reduce((acc, item) => {
  return acc.set(item.name, {
     id: item.id,
     urlName: item.urlName,
   })
}, new Immutable.Map())

console.log("Dave's Id", result.getIn(["Dave", "id"]));
console.log("Date's urlName", result.getIn(["Dave", "urlName"]));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/4.0.0-rc.9/immutable.js"></script>
Run Code Online (Sandbox Code Playgroud)

查看此处的文档,了解ImmutableJS Reduce和Native Javascript Array.reduce.两者的API都相同.