如果它是一个函数,则将值推送到 javascript 数组的问题

Posted

技术标签:

【中文标题】如果它是一个函数,则将值推送到 javascript 数组的问题【英文标题】:Issue with pushing values to a javascript array if it is a function 【发布时间】:2011-09-24 01:45:49 【问题描述】:

我正在尝试创建一组按钮,其行为类似于列表,其中一个数组是从所选值创建的。

下面是检查数组中是否已经存在值的函数,如果不存在则不会添加新值。

function linearSearch(arrayName, sValue) 
               
    Array.prototype.exists = function(search)
      for (var i=0; i<this.length; i++)
        if (this[i] == search) return true;

      arrayName.push(sValue);
      return false;
     

这是调用此函数的 jquery click 函数(列出的项目):

    con_array = [];
    $('.con_button').live('click', function (e) 
        e.stopPropagation()                              
        $(this).html('<div class="fun_button_center"></div>');
        con_value = $(this).attr('data-value');
        linearSearch(con_array, con_value);
        alert(con_array);
    );

如果该函数在没有参数的 click 函数内部,则该函数可以正常工作。然而在这种情况下,因为我可以重复使用它,所以它是最佳的,但 alert(con_array); 不会显示任何值

【问题讨论】:

【参考方案1】:

至少,这样写你的`linearSearch函数:

function linearSearch(arrayName, sValue) 
               
    Array.prototype.exists = function(search)
      for (var i=0; i<this.length; i++)
        if (this[i] == search) return true;
    ;

    if (arrayName.exists(sValue) return true;

    arrayName.push(sValue);
    return false;     

不过,以这种方式对 Array 进行猴子补丁很脆弱,因此您可以在全局范围内对其进行猴子补丁(仍然很难看,但至少它更快且随处可用:

Array.prototype.exists = function(search)
  for (var i=0; i<this.length; i++)
    if (this[i] == search) return true;
;

function linearSearch(arrayName, sValue) 
    
    if (arrayName.exists(sValue) return true;

    arrayName.push(sValue);
    return false;     

或者你可以内联那个循环:

function linearSearch(arrayName, sValue) 
    
    for (var i=0; i<arrayName.length; i++)
      if (arrayName[i] == sValue) return true;

    arrayName.push(sValue);
    return false;     

【讨论】:

ES5 有Array.prototype.indexOf() - 不需要exists 函数。 感谢您提供的众多选择。我会选择最简单的而不使用原型,数组包含不超过 5 个值。谢谢 @Alnitak: ***.com/questions/3629183/…【参考方案2】:

你可以这样试试:

Array.prototype.exists = function(search)
      for (var i=0; i<this.length; i++)
        if (this[i] == search) return true;

      this.push(search);
      return true;
 

function linearSearch(arrayName, sValue) 
               
    arrayName.exists(sValue);

【讨论】:

以上是关于如果它是一个函数,则将值推送到 javascript 数组的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将值推送到 Cypher 中的属性数组?

有没有更好的方法将值推送到表单控件,其中数组作为 Angular 中的值

如何按键过滤数组并使用javascript将值推送到另一个数组

将值推送到猫鼬模式中对象内的数组

webview javascript将值推送到上一页不起作用

将值推送到辅助数组javascript