为什么`arr.find()`返回`undefined`?

时间:2018-07-10 12:43:58

标签: javascript arrays node.js

在下面的代码his._notifications中是一个对象数组,每个对象都包含下面显示的属性。

我要做的是检查是否将传递给函数func()的每个对象 not 插入到数组中?

所以我正在使用.find(),并且如果对象已传递给函数或数组中已经存在对象,我希望它返回true,否则返回false

但是下面的日志语句显示undefined!为什么isExists未定义?推荐的检查项目是否重复的方法是什么?

代码

func(noti)
const isExists = this._notifications.find((obj) =>
  obj.title === noti.safeTitle
  && obj.text === noti.safeText
  && obj.bannerTitle === noti.safeBannerTitle
  && obj.bannerText === noti.safeBannerText
  && obj.icon === noti.icon
  && obj.onClickCallback === noti.onClickCallback
  && obj.eNotificationType === noti.notificationType
  && obj.deleteable === noti.deletable
  && obj.withBanner === noti.withBanner
);
logger.info('[isNotificationExists] For the current notification: ', JSON.stringify(notification), ' isExists: ', isExists);

2 个答案:

答案 0 :(得分:1)

来自MDN

  

find()方法返回数组中第一个元素的值   满足提供的测试功能。否则未定义是   返回。

     

includes()方法确定数组是否包含特定数组   元素,并根据情况返回true或false。它使用   sameValueZero算法,用于确定给定元素是否为   找到。

To check if an item is duplicated in array

function hasDuplicates(array) {
  return (new Set(array)).size !== array.length;
}

答案 1 :(得分:0)

find()在这里不是合适的数据结构,因为它的返回类型是找到的元素而不是标志(是否找到了)。您可以为此使用 underscorejs _.contains函数。

http://underscorejs.org/#contains