只有当没有数组元素满足条件时,我才需要在JavaScript代码中执行操作。最佳的方法是什么?
在这个特定的例子中,我需要将一些东西推送到dataLayer,只有当它还不存在的时候。我是这么做的
if (!window.dataLayer.some(
(element) => element.event === 'some_label',
)) {
gtm.push(someTrackingObject);
}
有更好/更简洁的方法吗?
只有当没有数组元素满足条件时,我才需要在JavaScript代码中执行操作。最佳的方法是什么?
在这个特定的例子中,我需要将一些东西推送到dataLayer,只有当它还不存在的时候。我是这么做的
if (!window.dataLayer.some(
(element) => element.event === 'some_label',
)) {
gtm.push(someTrackingObject);
}
有更好/更简洁的方法吗?
3条答案
按热度按时间toe950271#
您可以使用
.every()
如果你想检查是否没有元素满足一个特定的条件,只需反转条件
使用
.some()
已经足够好了,所以.every()
只是一种替代方法。zqry0prt2#
当前使用Array.prototype.some()的方法对于检查是否没有数组元素满足条件是最佳的,因为一旦满足条件,它就会停止迭代数组,从而避免不必要的迭代。
但是,如果你想要一个更简洁的版本,你可以使用Array. prototype. indexOf()方法来实现相同的结果:
在这里,Array. prototype. indexOf()返回数组中可以找到给定元素的第一个索引,如果不存在,则返回-1。注意,此方法假设someTrackingObject在window. dataLayer数组中是唯一的。
这两种方法各有利弊:
综上所述,当前使用Array. prototype. some()的方法最适合检查是否没有数组元素满足条件,如果someTrackingObject在window. dataLayer数组中是唯一的,则可以考虑使用**Array. prototype. indexOf()**以获得更简洁的版本。
nukf8bse3#
你所做的是一个很好的方法。您也可以使用
.every()
并检查!== 'some_label'
。如果你有大量的数据,你可以使用一个Map或设置,以提高查找时间的效率。但只有当您有多个查找和一个大数组大小时,这才有意义。
更新
搜索元素。
.find
在第一次匹配时退出,因此您不必检查数组中的每个元素。