Javascript 检查数组是否包含“相等”对象

Javascript 检查数组是否包含“相等”对象,javascript,arrays,Javascript,Arrays,这是一个简化的示例,但假设我想在100x100网格上生成5个唯一的位置。这些位置将存储在数组[[x,y],…]中 他们尝试了一种显而易见的方法,生成一个随机的x和y,并检查数组[x,y]是否已经在结果数组中。如果是,则生成不同的值,如果不是,则将其添加到结果数组中 结果=[]; 而result.length!==5 { 设x=Math.floorMath.random*100+1; 设y=Math.floorMath.random*100+1; 如果!结果。包括[x,y]{ 结果:pusharr

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

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

结果=[]; 而result.length!==5 { 设x=Math.floorMath.random*100+1; 设y=Math.floorMath.random*100+1; 如果!结果。包括[x,y]{ 结果:pusharray; } } 但是,这将永远找不到重复的数组,因为数组在技术上是不同的对象。那么,检测数组是否包含“相等”数组/对象的首选方法是什么?

您可以使用一些而不是include,并在比较之前使用join

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您可以使用some而不是include,并在比较之前使用join

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您可以与分解结合使用:

例如:

设arr=[[1,2],[3,4]; console.logarr.some[x,y]=>x==3&&y==4; .as控制台{背景颜色:黑色!重要;颜色:石灰;} .作为控制台包装{max height:100%!important;top:0;}您可以与解构结合使用:

例如:

设arr=[[1,2],[3,4]; console.logarr.some[x,y]=>x==3&&y==4; .as控制台{背景颜色:黑色!重要;颜色:石灰;}
.作为控制台包装{max height:100%!important;top:0;}您是否反对为此使用lodash函数?这可能比编写比较循环[x,y]容易得多[x,y]即使值相同,您是否反对为此使用lodash函数?这可能比编写比较循环[x,y]容易得多[x,y]虽然值是相同的,但由于所有的值都是一位数,所以在这里可以使用,但最好在连接中使用分隔符,这样可以在矩阵可能更大的情况下区分像[11,2]和[1,12]这样的对。应该在文章中说明,我需要这个来处理多位数。将编辑帖子。您可以忽略分隔符参数,如:。join。这将增加一个default@adiga谢谢你提供的信息。实际上我忘记了这一点。toString也可以,因为所有的值都是个位数,但最好在连接中使用分隔符,如果矩阵可能更大,它可以区分像[11,2]和[1,12]这样的对。应该在文章中说明,我需要这个来处理多个数字。将编辑帖子。您可以忽略分隔符参数,如:。join。这将增加一个default@adiga谢谢你提供的信息。我真的忘了…toString也能用