Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中检查条件的奇怪行为_Javascript - Fatal编程技术网

javascript中检查条件的奇怪行为

javascript中检查条件的奇怪行为,javascript,Javascript,我正在编写一个代码,在屏幕上使用svg绘制一个六边形网格,我之所以使用一个六边形而不是一个模式,是因为我最终想让每个六边形都成为参考对象 我用一些数学和点参考画了六边形 因此,与其让这变得复杂,不如解释我的代码,这是我的代码 我的问题是函数drawHexAround(cent)//第41行, 假设该函数以“cent”为质心围绕六边形绘制六边形 检查条件如下: if (!contains(drawnCentroids,centroidNew)) { makeHex(centroidNew)

我正在编写一个代码,在屏幕上使用svg绘制一个六边形网格,我之所以使用一个六边形而不是一个模式,是因为我最终想让每个六边形都成为参考对象

我用一些数学和点参考画了六边形

因此,与其让这变得复杂,不如解释我的代码,这是我的代码

我的问题是函数drawHexAround(cent)//第41行, 假设该函数以“cent”为质心围绕六边形绘制六边形

检查条件如下:

if (!contains(drawnCentroids,centroidNew)) {
    makeHex(centroidNew);
    drawnCentroids.push(centroidNew);
}
这里是函数

function contains(a, obj) {
    var l = a.length;

    for (var i=0;i<l;i++) {
        // console.log(a[i],obj);
        // console.log(a[i] === obj);

        if (a[i] === obj) {
            // console.log('true');
            return true;
        }
    }

    return false;
}
函数包含(a,obj){
var l=a.长度;

对于(var i=0;i您犯了一个错误,即检查两个对象的相等性将检查对象中每个属性的相等性-事实并非如此

您没有在问题中指定,但从代码中我们可以看到您正在检查的对象类似于:

centroidNew = {
         cx: xRight,
         cy: yMidTop
     };
你有一个数组,你正在寻找一个循环

除非
a[0]
obj
是对完全相同对象的引用,否则如果(a[i]==obj){
测试将永远不会计算为真

要解决这个问题,您可以显式地chck属性,因为只有两个属性,这可能适合您

if (a[i].cx === obj.cx && a[i].cy === obj.cy) {

这是你的小提琴的更新:现在它有时会从测试中记录
true

你的小提琴什么也没做(它被设置为
onload
,而不是head中的
)-修复:哇,谢谢,我自己也在看,但是javascript中有没有一种方法可以在不比较对象属性的情况下比较对象的值相等?