Javascript Lodash映射仅在一个条件下

Javascript Lodash映射仅在一个条件下,javascript,node.js,object,lodash,Javascript,Node.js,Object,Lodash,我需要一个名为events.json的文件,然后使用.map创建我的对象 var data = require('./events.json') var newEventList = data.events.map(events => ({ id: events.id , name: events.name , venue: events.venue.name })); 然而,有时我会得到两个相同的event.id。在这些情况下,map方法在我的newEventL

我需要一个名为events.json的文件,然后使用.map创建我的对象

var data = require('./events.json')
var newEventList = data.events.map(events => ({
    id: events.id ,
    name: events.name ,
    venue: events.venue.name
}));
然而,有时我会得到两个相同的event.id。在这些情况下,map方法在我的newEventList对象中创建一个重复的条目。如果ID相同,是否可以在map函数中设置一个条件来跳过该条目的“映射”

需要添加的一点是,events.json中的重复项始终是连续的,因此If语句将只比较先前映射的项


感谢您的帮助。

由于您使用的是
lodash
,因此您可以使用
.uniqBy
功能删除阵列中的重复项:

const data = require('./events.json');
const uniqEvents = _.uniqBy(data.events, 'id');
const newEventList = uniqEvents.map(events => 
   id: events.id ,
   name: events.name ,
   venue: events.venue.name
);

由于您使用的是
lodash
,因此可以使用
..uniqBy
功能删除阵列中的重复项:

const data = require('./events.json');
const uniqEvents = _.uniqBy(data.events, 'id');
const newEventList = uniqEvents.map(events => 
   id: events.id ,
   name: events.name ,
   venue: events.venue.name
);

使用lodash中提供的
\ uniqBy
(假设OP需要
loadash
解决方案)


使用lodash中提供的
\ uniqBy
(假设OP需要
loadash
解决方案)

为原始数组中的每个项创建输出,因此不能跳过项。您可以与助手一起使用重复数据消除。对于每个项目,检查
id
是否在集合中。如果不是,则将其添加到结果数组和集合中

const data = require('./events.json')
const dedupe = new Set();
const newEventList = data.events.reduce((list, event) => {
  if(!dedupe.has(event.id)) {
    list.push({
      id: event.id ,
      name: event.name ,
      venue: event.venue.name
    });

    dedupe.add(event.id);
  }

  return list;
}, []);
为原始数组中的每个项创建输出,因此不能跳过项。您可以与助手一起使用重复数据消除。对于每个项目,检查
id
是否在集合中。如果不是,则将其添加到结果数组和集合中

const data = require('./events.json')
const dedupe = new Set();
const newEventList = data.events.reduce((list, event) => {
  if(!dedupe.has(event.id)) {
    list.push({
      id: event.id ,
      name: event.name ,
      venue: event.venue.name
    });

    dedupe.add(event.id);
  }

  return list;
}, []);

为什么不先过滤
数据.events
,然后再映射,比如说使用
.unique()
?我以前从未听说过这种方法。谢谢,我会看一看。为什么不先过滤
数据.events
,然后再映射,比如说使用
.unique()
?我以前从未听说过这种方法。谢谢,我会看一看。这里有两个非常相似的答案,但我会选择这个,因为我喜欢它包含在一个函数中的方式。谢谢这里的2个非常相似的答案,但我将接受这个,因为我喜欢它包含在一个函数中的方式。谢谢你给我一个非洛达斯式的回答!谢谢你的非洛达斯式回答!