如何在数组中重新标记Object?

时间:2010-09-06 13:04:42

标签: javascript jquery

扩展前一个关于JavaScript和jQuery的问题,我正在尝试创建一个数组然后查看它,但是数组包含维度而且我无法正确...

var markers = [];
$.getJSON('GetList', "id"= + data.id,
        function(data){
           $.each(data.list, function(index, data) {
                }
                markers.push( {
                    category:data.category,
                    id:data.id,
                    location:{
                        latitude:data.location.latitude,
                        longitude:data.location.longitude
                    }
                });
            });
        });
        return markers;
}

首先让我感到震惊的是,现在每个项目都会被称为“对象”,而默认情况下,我仍然想知道它们是否可以被贴上标签?

接下来,我尝试访问id以将其与用户的选择进行比较, 但它不起作用。

    var selection = $(div_id).val();
    var arr = $.inArray(selection, markersArray.id);
    if( arr >= 0) {
        return search(selection, div_id);
    } else {
        throw("selection not found in selectionSearch()");
    }

我在这里做错了什么..?

2 个答案:

答案 0 :(得分:1)

要标记对象,请添加toString函数,如下所示:

            markers.push({
                toString: function () { return this.something; },
                category:data.category,
                id:data.id,
                location:{
                    latitude:data.location.latitude,
                    longitude:data.location.longitude
                }
            });

要搜索数组,您需要自己的循环 jQuery的$.inArray函数在数组中搜索完全匹配;它不能用于查找具有匹配属性的对象 你可以自己找到一个匹配,如下:

for(var i = 0; i < markers.length; i++) {
    if (markers[i].id === selection)
        return search(selection, div_id);
}
throw("selection not found in selectionSearch()");

答案 1 :(得分:0)

每个项目的类型都是Object,没有什么奇怪之处。没有理由试图改变它。

要根据项目中的属性过滤掉数组中的项目,请使用grep方法:

var arr = $.grep(markers, function(e){ return e.id === selection; });

要检查数组是否为空,您不要将数组与数字进行比较,而是使用length属性:

if (arr.length > 0) {