繁体   English   中英

(Lodash)是否有一种方法可以检查集合中是否存在(嵌套)相同的对象?

[英](Lodash) Is there a method to check if an identical object exists (nested) in a collection?

我想知道是否有Lodash的方法来解决这个问题,否则我会用for循环来解决。 如果collection包含一个或多个嵌套对象与c相同的元素,我想返回true

以下示例将返回true因为collection[1]包含相同的c

针:

c = {
  x: 11,
  y: 22,
  z: 33
}

草垛:

collection = [
  {
    a: 1,
    b: 1,
    c: {
      x: 10,
      y: 20,
      z: 30
    },
    d: 1
  },
  {
    a: 1,
    b: 1,
    c: {
      x: 11,
      y: 22,
      z: 33
    },
    d: 1
  },
  {
    a: 1,
    b: 1,
    c: {
      x: 12,
      y: 24,
      z: 36
    },
    d: 1
  }
]

这与诸如如何用lodash进行2个对象之间的深度比较之类的问题不同 因为我需要检查是否有任何收集项包含嵌套在其中的相同对象,所以不比较两个对象是否彼此相同。

在此先感谢您的帮助。

您可以在递归函数中使用_.isEqual

 function find(h, n) { if (_.isEqual(h, n)) return true; let found; if (Array.isArray(h)) { for (let e of h) { found = find(e, n); if (found) return found; } } else if (h instanceof Object) { return find(Object.values(h), n); } return false; } var c = { x: 11, y: 22, z: 33 }; var d = { x: 1111, y: 2222, z: 32223 }; var collection = [{ a: 1, b: 1, c: { x: 10, y: 20, z: 30 }, d: 1 }, { a: 1, b: 1, c: { x: 11, y: 22, z: 33 }, d: 1 }, { a: 1, b: 1, c: { x: 12, y: 24, z: 36 }, d: 1 } ]; console.log(find(collection, c)); console.log(find(collection, d)); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM