首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将同一对象的一个键中的对象值映射为具有相同对象的值的对象键?

如何将同一对象的一个键中的对象值映射为具有相同对象的值的对象键?
EN

Stack Overflow用户
提问于 2020-08-12 18:37:03
回答 3查看 91关注 0票数 1

使用 TypeScript

下面是一个对象数组&我想将它映射到一个新对象,如下所示。(见预期结果)

代码语言:javascript
运行
复制
// input array
const getPostAPI = 
[
  {
    get: '1234',
    post: 'abcd',
  },
  {
    get: '3423',
    post: 'dfcv',
  },
  {
    get: '1234',
    post: 'iucv',
  },
  {
    get: '1234',
    post: 'oipl',
  },
  {
    get: '3423',
    post: 'ffgf',
  },
  {
    get: '4567',
    post: 'tyui',
  },
  ]

从上面的对象数组中,我希望将post值映射为用于重复get值的数组。下面我已经给出了扩展的结果。

代码语言:javascript
运行
复制
// output object
const exptectedResult = {
  '1234': ['abcd',
    'iucv',
    'oipl',
    '1234',],
  '3423': ['dfcv',
    'ffgf'],
  '4567': ['tyui']
  }

以下是我尝试过的。但它正在覆盖一些价值。也就是说,我没有得到对应get键数组中的确切元素数。(比实际少一个)

代码语言:javascript
运行
复制
this.getPostMap = this.getPostAPI.reduce(
  (map, api) => ({
    ...map,
    [api.get]: map[api.get]
      ? [...map[api.get], api.post]
      : [] || [],
  }),
  {}
);
EN

回答 3

Stack Overflow用户

发布于 2020-08-12 18:45:10

这段简单的代码将非常顺利地工作。

代码语言:javascript
运行
复制
getPostAPI.reduce((acc, el)=>{
    (acc[el.get] = acc[el.get] || []).push(el.post)
    return acc
}, {})
票数 1
EN

Stack Overflow用户

发布于 2020-08-12 18:45:40

这是一个非常可怕和不可读的代码块,可以做一些非常简单的事情。例如:

代码语言:javascript
运行
复制
const getPostAPI = [{
    get: '1234',
    post: 'abcd',
  },
  {
    get: '3423',
    post: 'dfcv',
  },
  {
    get: '1234',
    post: 'iucv',
  },
  {
    get: '1234',
    post: 'oipl',
  },
  {
    get: '3423',
    post: 'ffgf',
  },
  {
    get: '4567',
    post: 'tyui',
  },
];

const expectedResult = getPostAPI.reduce((map, {get,post}) =>
  (map[get] = map[get] || []).push(post) && map,
{});

console.log(expectedResult);

票数 1
EN

Stack Overflow用户

发布于 2020-08-12 19:05:03

您的问题是,当get属性未定义时,您实际上希望使用第一个post而不是一个空对象来实现它:

代码语言:javascript
运行
复制
this.getPostMap = this.getPostAPI.reduce(
  (map, api) => ({
    ...map,
    [api.get]: map[api.get]
      ? [...map[api.get], api.post]
      : [api.post],
  }),
  {}
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63382825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档