0

我有一个标记对象,关键是联系人姓名。以及一个对象数组,其中包含一个“联系人”项目,该项目也是联系人名称。

我正在尝试从对象数组中检测联系人是否具有现有的“地理围栏”并显示“查看围栏”按钮,如果没有则显示“无围栏”按钮。

栅栏存储在一个对象数组中,称为fencesCookie

到目前为止的代码:

function fenceButton(id) {
    for (var key in markers) {
        if (markers[key].id === id) {
            $.each(fencesCookie, function (i, f) {
                if (key === f.contact) {
                    menu.add(strings[strLang].viewfence, 'fence',
                    function(){
                        viewFence(f.lat, f.lng, f.radius);
                        menu.close();
                    });
                } else {
                    console.log("No Fence : "+key+" "+f.contact)
                }
            });
            if ($.isEmptyObject(fencesCookie)) {
                menu.add('No Fence', 'nofence',
                function(){
                    menu.close();
                });             
            }
        }
    }   
}

console.log 会吐出所有不匹配的项目,因此在此处添加“No Fence”按钮代码会产生多个按钮,而不仅仅是 View 或 No Fence 按钮。

我会以错误的方式解决这个问题吗?

4

1 回答 1

1

文斯,如果没有看到“fencesCookie”中的内容或“标记”对象中的内容,很难说,但它要么是:

  1. [不太可能] 您的“标记”对象中有多个匹配的 id,这导致“(标记 [key].id === id)”每次都给出肯定结果并再次跳入 cookie 循环。

  2. [最有可能] 您对“fencesCookie”中匹配键的测试在所有情况下都失败,除非它匹配,因此您为“fenceCookie”中的每个键或除一个键之外的所有键打印一个“无栅栏”按钮。

我更改了顺序并添加了一个变量以在循环完成后检查匹配项。试试这个(或类似的东西):

function fenceButton(id) {
    for (var key in markers) {
        if (markers[key].id === id) {
            // set a variable to test if we find a match
            // we'll set it to true if we find one
            var match = false;
            // Test that fencesCookie exists
            if ($.isEmptyObject(fencesCookie)) {
                // if not 
                menu.add('No Fence', 'nofence',
                function(){
                    menu.close();
                });             
            } else {
                // if it does
                $.each(fencesCookie, function (i, f) {
                    // loop through the cookie and match on the f.contact
                    if (key === f.contact) {
                        // set match to true
                        match = true;
                        // create the 'view' button
                        menu.add(strings[strLang].viewfence, 'fence',
                        function(){
                            viewFence(f.lat, f.lng, f.radius);
                            menu.close();
                        });
                    } 
                });
                // The loop is done so test 'match' to see if we found a match
                if (match === false) {
                    // No matches so create the 'No Fence' button
                    console.log("No Fence : "+key+" "+f.contact)
                }
            }
        }
    }   
}
于 2012-10-11T20:37:32.450 回答