ES6减少方法不返回所需的输出

时间:2017-10-05 13:28:26

标签: javascript typescript ecmascript-6

如果您要从 Snippet 1

中记录final数组,则这是输出( 图像1

我尝试做的是将我的数组缩小为 Image 2

中显示的数组。

我已经尝试过使用lodash _.uniqBy() [ Snippet 2 ],但我从记录reduce变量获得的输出仍然是来自 图像1 的输出。如何将final数组缩减为 图像2 中的输出?

Microsoft Documentation 图片1

enter image description here

图片2

const reduce = final.reduce((x, y) => {
  if (x.department !== y.department) {
    return x;
  }
})

console.log(final)
console.log(reduce);

Snippet 1

_.uniqBy(final, 'department')

Snippet 2

更新

这是在.ts中的TypeScript .js中。

接口=> [{ department: string, professors: string[] }]

至于请求

这是我获取数据的地方

[
    {
      department: 'Department of Mathematics - INTRAMUROS',
      professors: [
        'Sabino, Lilibeth D.',
        'Department Chair',
 .....

这是我从final数组

到达之前的代码
const recommend = [];
const final = [];

recommended.forEach((prof) => {
  const find = proffessorDetails.find((collection) => {
    return collection.professors.find((professor) => professor == prof);
  });
  recommend.push(find);
})

const find = recommend.map((collection) => {
  return {
    department: collection.department,
    prof: _.intersection(collection.professors, recommended)
  };
});
final.push(find);

3 个答案:

答案 0 :(得分:3)

如果你使用Map这样做会更好:

type department = { department: string, professors: string[] };
let mUnique : Map<string, department> = new Map(final.map((obj: department) => <[string, department]>[obj.department, obj]));
let mUniqueArray = [...mUnique.values()]; //or Array.from(mUnique.values());

答案 1 :(得分:2)

使用reduce,您将始终修改同一个对象,并将其返回。提供起始值(在这种情况下为{})总是更容易。 {}始终是obj。要分配唯一值(item s),请将它们分配给obj[item.department]。最后不要忘记return obj

const reduce = Object.values(final.reduce((obj, item) => {
  obj[item.department] = item;
  return obj;
}, {}));

使用Object.values,您只能从缩小对象中检索值。

答案 2 :(得分:1)

如前所述,您需要提供累加器作为第一个arg来减少回调。请检查此链接:Array.prototype.reduce。不确定这是否是您想要的,但是此代码将为您提供具有唯一department字段

的对象的数组
final.reduce((res, item ) => {
    return res.find(({ departament }) => departament === item.departament) ? res : [res, item];
}, [])