首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你怎么把它变成这样呢?

你怎么把它变成这样呢?
EN

Stack Overflow用户
提问于 2021-10-07 20:25:10
回答 2查看 62关注 0票数 0

我有一个数组:

代码语言:javascript
复制
const arr = [
   { name: "Jeff", id: 1 },
   { name: "Mary", id: 2 },
   { name: "Jeff", id: 3 },
   { name: "Mary", id: 4 },
   { name: "Emile", id: 5 },
];

我想把它变成这样:

代码语言:javascript
复制
const obj = {
    Jeff: [1, 3],
    Mary: [2, 4],
    Emile: [5],
};

我尝试使用Array.reduce方法,但我似乎无法理解其中的逻辑。

代码语言:javascript
复制
const obj = arr.reduce((acc, info) => {
    acc[info[name]] = .... 
    return acc;
}, {});

我假设这可以用reduce方法来完成。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-07 20:28:21

你在正确的轨道上,你只需要检查数组是否在那里。

代码语言:javascript
复制
const arr = [
   { name: "Jeff", id: 1 },
   { name: "Mary", id: 2 },
   { name: "Jeff", id: 3 },
   { name: "Mary", id: 4 },
   { name: "Emile", id: 5 },
];

const result = arr.reduce((acc, { name, id }) => {
  acc[name] = acc[name] || [];  // or if(!acc[name]) acc[name] = [];
  acc[name].push(id);
  return acc;
}, {});

console.log(result);

票数 5
EN

Stack Overflow用户

发布于 2021-10-07 20:29:42

你可以这样做:

代码语言:javascript
复制
const arr = [
  { name: "Jeff", id: 1 },
  { name: "Mary", id: 2 },
  { name: "Jeff", id: 3 },
  { name: "Mary", id: 4 },
  { name: "Emile", id: 5 },
];

const result = arr.reduce(
  (acc, cur) => ((acc[cur.name] || (acc[cur.name] = [])).push(cur.id), acc),
  {}
);

console.log(result);

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69487427

复制
相关文章

相似问题

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