Javascript 有没有一种更简洁的方法可以基于过滤器属性过滤数组?

Javascript 有没有一种更简洁的方法可以基于过滤器属性过滤数组?,javascript,Javascript,我已经定义了一系列会话,如下所示: const sessions = [{id: 1, eventYear: "2019"},{id: 2, eventYear: "2018"},{id: 3, eventYear: "2018"}]; 我想用eventYear“2018”创建一个新的对象数组 我尝试在数组上进行映射,如果session.eventYear===eventYear返回会话记录,否则什么也不返回,但得到了一个包含3个(不

我已经定义了一系列会话,如下所示:

const sessions = [{id: 1, eventYear: "2019"},{id: 2, eventYear: "2018"},{id: 3, eventYear: "2018"}];
我想用eventYear“2018”创建一个新的对象数组

我尝试在数组上进行映射,如果
session.eventYear===eventYear
返回会话记录,否则什么也不返回,但得到了一个包含3个(不是2个)长且有一个未定义记录的对象列表。我只想要2张唱片

我有以下工作,但它感觉不舒服的非功能性和长期。如果能给我一个建议,让它在现代JavaScript中更加简洁,我将不胜感激

const sessionsForEventYear = [];
sessions.map(function(session) {
  if (session.eventYear === eventYear) {
    sessionsForEventYear.push(session);
  }
});

改用
Array.prototype.filter

const sessions=[{id:1,eventYear:“2019”},{id:2,eventYear:“2018”},{id:3,eventYear:“2018”}];
const sessionsForEventYear=sessions.filter({eventYear}=>eventYear=='2018');

console.log(sessionsForEventYear)
如果您对
.map()
的返回值不感兴趣,则不应该使用它。在这种情况下,您应该使用
.forEach()
.reduce()
筛选器是否创建新对象或是否包含对旧对象的引用?数组是新的,但之前数组的项不会被复制-新数组包含对相同对象的引用。在这方面,映射是否与筛选器相同。谢谢我没有意识到其中的微妙之处。此外,我还研究了另一个问题,这个问题是封闭的,我没有看到任何关于返回内容(即引用或新对象)的讨论。在我看来,这是一个非重复。