你怎么把这个变成这个?

how do you turn this into this?

我有一个数组:

const arr = [
   { name: "Jeff", id: 1 },
   { name: "Mary", id: 2 },
   { name: "Jeff", id: 3 },
   { name: "Mary", id: 4 },
   { name: "Emile", id: 5 },
];

我想把它变成这样:

const obj = {
    Jeff: [1, 3],
    Mary: [2, 4],
    Emile: [5],
};

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

const obj = arr.reduce((acc, info) => {
    acc[info[name]] = .... 
    return acc;
}, {});

我想这可以用 reduce 方法来完成

你走对了,你只需要检查数组是否存在。

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);

你可以这样做:

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);