当前位置: 首页 > 知识库问答 >
问题:

检查数组是否包含“相等”对象[重复]

窦伟
2023-03-14

这是一个简化的示例,但假设我想在100x100网格上生成5个唯一位置。这些位置将存储在数组[[x, y],…]中。

尝试了生成随机 x 和 y 并检查数组 [x, y] 是否已经在结果数组中的明显方法。如果是,则生成不同的值,如果不生成,则将其添加到结果数组中。

result = [];
while (result.length !== 5) {
    let x = Math.floor(Math.random() * 100) + 1;
    let y = Math.floor(Math.random() * 100) + 1;
    if (!result.includes([x, y])) {
        result.push(array);
    }
}

但是,这将永远不会找到重复项,因为数组在技术上是不同的对象。那么,检测数组是否包含“相等”数组/对象的首选方法是什么?

共有2个答案

窦涵忍
2023-03-14

您可以使用Array。some()与解构结合使用:

示例:

let arr = [[1,2],[3,4]];

console.log(arr.some(([x, y]) => x === 3 && y === 4));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
尹昂雄
2023-03-14

您可以使用some()代替includes(),并在比较之前使用join()<-code>

while (result.length !== 5) {
    let x = Math.floor(Math.random() * 10) + 1;
    let y = Math.floor(Math.random() * 10) + 1;
    if (!result.some(i => i.join() === [x, y].join())) {
        result.push(array);
    }
}

js中不能通过简单相等来比较两个数组。例如[]===[]false。因为两个数组都有不同的引用

console.log([] === []); //false

 类似资料:
  • 我有一个创建Element类型arraylist的主类: 然后我有一个元素clas: 我想在将一个元素添加到列表(它的id和名称)之前进行检查,以检查列表中已经存在的另一个元素是否已经具有这些精确值(id和名称)。我知道我可以使用toString方法来实现这一点,但我不确定如何在将元素添加到列表之前重写它以传递id和名称。他们是这样做的吗?理想情况下,我只想添加一个元素,如果它还不存在的话。

  • 问题内容: 是否有任何的java utils的,允许检查对象平等,不受 平等 覆盖?由于某些原因,我不想为类提供equals方法。我在单元测试中需要类似 SomeUtils.equals(a,b)之 类的东西 , 它比较所有对象字段(我想是通过反射)。 问题答案: 您可以在Apache Commons EqualsBuilder中使用

  • 我有这两个数组第一个数组是固定的,不改变,包含第二个数组的id: 第二个可以改变 我想返回真如果即使有一些变化在最后的变量数组是相同的长度和包含完全相同的键的"固定" 无效: 返回false,因为缺少id“123”(长度也不同,因此默认情况下被排除) 无效: 这将返回false,因为即使包含3个元素(如“fixed”中的元素),也会丢失id“789”并有另一个“001”

  • 问题内容: 我想检查两个数组是否相等。我的意思是:相同的大小,相同的索引,相同的值。我怎样才能做到这一点? 根据用户的建议,如果数组中的至少一个元素不同,我希望以下内容可以打印 enter ,但实际上没有。 问题答案: $arraysAreEqual = ($a == $b); // TRUE if $a and $b have the same key/value pairs. $arraysA

  • 问题内容: 我知道我可以这样做: 然后只需编写语句中所需的代码。 还有其他方法可以检查它们是否相等? 问题答案: 怎么了 if(!Arrays.equals(array1,array2)) 与相同,即是同一数组。这不是大多数人期望的。 比较数组的内容。

  • 我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表 要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。