如何仅在 Jquery/Javascript 中尚不存在时才将字符串添加到数组中

how to add a string to an array only if it doesn't exist yet in Jquery/Javascript?

本文关键字:字符串 添加 数组 何仅 Jquery Javascript 不存在      更新时间:2023-09-26

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

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

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);
循环在

每次迭代中执行测试。在找到要查找的内容之前,它会在每次迭代中添加新条目。

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

var sitemap = {};
$(document).on( "pagebeforechange", function( e, data ) {
  if (!sitemap[ data.toPage ])
    sitemap[data.toPage] = { type: "external", data: data };
});