Проблема с передачей значений в массив javascript, если это функция - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь создать набор кнопок, которые ведут себя как список, где массив создается из выбранных значений.

Ниже приведена функция для проверки, существует ли уже значение в массиве, и если его нет, оно не добавит новое значение.

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 (из перечисленных элементов), где эта функция вызывается:

    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);
    });

Функция прекрасно работает, если она находится внутри функции щелчка безпараметры.Тем не менее, в этих обстоятельствах, где это было бы оптимальным, потому что я могу использовать его повторно, никакое значение не отображается с предупреждением (con_array);

Ответы [ 2 ]

1 голос
/ 28 июня 2011

По крайней мере, напишите свою функцию `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;     
}
0 голосов
/ 28 июня 2011

Вы можете попробовать вот так:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...