0

当用户浏览我的应用程序时,我正在填充站点地图数组。

但是我填充站点地图的逻辑是有缺陷的。这是我正在做的事情:

var siteMap = [],
    j = siteMap.length;

$(document).on( "pagebeforechange", function( e, data ) {

    if (j == 0 ){
        // add cause sitemap has no elements
        siteMap.push( { type: "external", data: data });
        } else {
            // loop through the sitemap object
            for ( var i = 0; i < j; i++) {
            // check if element is already stored
            if ( data.toPage == self.options.siteMap[i].data.toPage ){
                break;
                }   
            self.options.siteMap.push( { type: "external", data: data } );
            }           
        }
    }); 

问题是我的休息没有按预期工作。我想遍历站点地图并将data.toPage(类似 /some/page.html 的字符串)与我已经存储的内容进行比较。如果我找到匹配项,则循环应该在不向站点地图推送新元素的情况下结束。但是,现在我正在循环,如果在循环位置(1)处找不到元素,则不会触发中断,并且我在每个循环上添加一个条目,直到条目匹配。

问题
我怎样才能修复循环,所以如果不存在匹配项,它只会添加一个条目?

感谢帮助!

编辑
这就是我现在拥有的:

(function( $, window) {
   $.widget("mobile.multiview",$.mobile.widget, {   
      options: {
         siteMap = {};
         },
      eventBindings: function() {

        $(document).on( "pagebeforechange", function( e, data ) {

            var self = this;
            if (!self.options.siteMap[data.toPage]){
               self.options.siteMap[data.toPage] = { type: "external", data: data };
               }
            });
        }
 }) (jQuery,this);
4

1 回答 1

1

您循环在每次迭代中执行测试。在它找到它正在寻找的东西之前,它会在每次迭代中添加新条目。

您需要做的是查看该元素是否已经在数组中,如果没有,添加它。更好的是,首先放弃使用数组的想法,只使用“toPage”值作为对象属性。

var sitemap = {};

$(document).on( "pagebeforechange", function( e, data ) {
  if (!sitemap[ data.toPage ])
    sitemap[data.toPage] = { type: "external", data: data };
});
于 2012-05-26T13:08:56.103 回答