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

3

我有一个对象数组,希望将其转换为一个普通的Immutable映射:

name: {
  urlname
  id
}

目前我正在处理以下数据,它是对象数组:

data = data.map((data) => ({
  name: data.name,
  urlName: data.urlName,
  id: data.id
}))

我将尝试转换以下内容(data):
[{"id":"10","name":"Dave","urlName":"foo-bar","order":"-100","classId":"12","className":"David","classUrlName":"david-foo-bar"}]

如上所述,如果可能的话,我希望以名称作为键,并将urlName和id作为值添加到该键中。如果可以的话,我想循环遍历数据,直到所有内容都被减少到该结构。

1个回答

8

由于您想将数据从一个形状转换为另一个形状,您可以使用reduce函数来完成此任务。

reduce函数将数据转换为一个Map,其中每个键是一个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"]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/4.0.0-rc.9/immutable.js"></script>

在这里查看文档,了解ImmutableJS Reduce和原生Javascript的Array.reduce。两者在API上完全相同。


这不是一个地图,而是一组地图吗?但我只需要一个地图。 - Cube3
@JordanBarber 你想先从数组中取出地图吗? - Bamieh
我希望它只是一个映射,就像这样:“Dave”:{ “id”:“10”, “urlName”:“foo-bar” }这样我就可以使用data.getIn(['Dave','url'])了。 - Cube3
@Cube3 很高兴能够帮助 :) - Bamieh
让我们在聊天中继续这个讨论 - Cube3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接