Javascript 查找两个数组之间是否存在对象的最佳方法

Javascript 查找两个数组之间是否存在对象的最佳方法,javascript,Javascript,下面的方法对我来说似乎有点幼稚,所以我想知道是否有更好的方法来做到这一点。涉及2个数组,它们包含我必须通过特定属性进行比较的对象: function exists(objArray, id) { var isFound = false; objArray.forEach(obj => { if (obj.Id == id) isFound = true; }); return isFound; } var arra

下面的方法对我来说似乎有点幼稚,所以我想知道是否有更好的方法来做到这一点。涉及2个数组,它们包含我必须通过特定属性进行比较的对象:

function exists(objArray, id) {
    var isFound = false;
    objArray.forEach(obj => {
        if (obj.Id == id)
            isFound = true;
    });

    return isFound;
}

var array1, array2;
array1.forEach(obj => exists(array2, obj.Id));

改用
。一些

const exists = (objArray, id) => objArray.some(obj => obj.Id === id);

(我强烈建议使用严格的等式
==
,如果可能的话,不要使用草率的等式)

使用
,有些则使用

const exists = (objArray, id) => objArray.some(obj => obj.Id === id);
(我强烈建议使用严格的等式,如果可能的话,不要使用草率的等式)

您可以通过传递一个比较器函数来使用lodash来检查两个数组是否有一个公共对象

比较器(obj1、obj2){ 返回obj1.id!==obj2.id; } 设arr1=[{id:1}] 设arr2=[{id:2}] _.differenceWith(arr1、arr2、comparator)
您可以通过传递一个comparator函数来使用lodash,以检查两个数组是否具有公共对象

比较器(obj1、obj2){ 返回obj1.id!==obj2.id; } 设arr1=[{id:1}] 设arr2=[{id:2}]
_.与(arr1、arr2、比较器)的差异
你能详细解释一下为什么强制严格相等吗?因为使用草率相等太令人困惑了。同样地使用strick将检查数据类型和值,而另一个将忽略数据类型,只比较值,这并不总是保证正确性。请注意,虽然这样做会在找到匹配项后短路(一件好事!)从长远来看,它的性能特征仍然与OP相同。@MichaelMunta A
for
循环可能比
forEach
或任何其他循环都快,但可读性较差。性能几乎从来都不是一个值得关注的问题。首先优先考虑干净、可读的代码。只有当某段代码被证明是问题时,才应在大多数情况下,ld可读性都会被牺牲。你能详细说明为什么强制严格相等吗?因为使用草率相等太令人困惑了使用strick会同时检查数据类型和值,而另一个会忽略数据类型,只比较值,这并不总是保证正确性。请注意一旦找到匹配的t型电路(一件好事!)从长远来看,它的性能特征仍然与OP相同。@MichaelMunta A
for
循环可能比
forEach
或任何其他循环都快,但可读性较差。性能几乎从来都不是一个值得关注的问题。首先优先考虑干净、可读的代码。只有当某段代码被证明是问题时,才应在大多数情况下,会牺牲ld的可读性。