построение поиска из split (":") и индексация его в объект - PullRequest
0 голосов
/ 01 июля 2010

В приведенном ниже javascript «this» относится к объекту Car, а search_id относится к текстовому полю ввода с идентификатором «search_input». Таким образом, в основном пользователь вводит текст в поле, и поиск происходит на основе ввода. Теперь я понимаю, что метод val () получает пользовательскую строку ввода из поля ввода. Однако я не уверен, что делает двоеточие в методе split (). Я всегда думал, что метод split () просто помещает запятую, когда вы передаете в нее пустую строку. И затем оказывается, что разделенная переменная содержит массив строк, разбитых на входные данные. Однако зачем нам передавать первую разбитую строку в массиве строк (splitted [0]) и вторую строку (splitted [1]), а затем передавать ее в переменную string_to_scope? В основном это в процессе построения поиска. И вот эти три строки, я не уверен, что происходит:

var splitted = jQuery(this.search_id).val().split(": ");
if (splitted[0] && splitted[1]){
   if (string_to_scope[splitted[0]]) ret[string_to_scope[splitted[0]]] = splitted[1];

Вот еще контекст:

Car.prototype.filter_func=function(){
var ret={};
var string_to_scope = {
    'Year': 'year_num_eq',
    'Make': 'make_name_eq',
    'Description': 'description_eq',
    'Expiry': 'expires_on_eq'
};
var search_value = jQuery(this.search_id).val();

if(search_value != null && search_value.length > 0){
    var splitted = jQuery(this.search_id).val().split(": ");
    if (splitted[0] && splitted[1]){
        if (string_to_scope[splitted[0]]) ret[string_to_scope[splitted[0]]] = splitted[1];
    }
}
return ret;
 };

Спасибо за любой ответ.

Ответы [ 3 ]

1 голос
/ 01 июля 2010
// 'Year: 1998' -> ['Year', '1998'];
var splitted = jQuery(this.search_id).val().split(": ");

// if there were two parts 
// (the year is not missing)
if (splitted[0] && splitted[1]){

  // if the key exists in string_to_scope object
  // -> ok because string_to_scope['Year'] exists
  if (string_to_scope[splitted[0]]) 

   // ret[ string_to_scope['Year'] ]
   // -> ret['year_num_eq'] = '1998';
   ret[ string_to_scope[splitted[0] ] = splitted[1];
0 голосов
/ 01 июля 2010

Split работает так же, как и звучит. Разбивает строку по входу и возвращает массив. Вот что происходит с расколом. jQuery (this.search_id) .val (). split (":");

Затем они проверяют, установлены ли значения как для первого индекса, так и для второго. if (split [0] && splitted [1])

Если это так, то они проверяют, соответствует ли первое значение имени свойства в объекте string_to_scope. Вы можете получить доступ к свойствам объекта по индексу, аналогичному массиву. if (string_to_scope [splitted [0]])

Если существует свойство с таким именем, то они возвращают новый объект ret со свойством первого значения разделения, равного второму значению разделения. ret [string_to_scope [splitted [0]]] = splitted [1];

0 голосов
/ 01 июля 2010

Идея состоит в том, чтобы позволить кому-то войти в поиск, который выглядит как "Make: Toyota". Другими словами, чтобы в одном окне поиска можно было выполнять поиск по нескольким полям (где вы указываете, какое поле). Более типичным подходом было бы иметь раскрывающийся список для типа поиска, который отделен от поискового термина; это пытается объединить их в одну коробку.

Метод "split" берет строку, содержащую разделитель, и превращает ее в массив, содержащий все до, между или после разделителя. В этом случае он превращается

«Сделать: Тойота» в [«Сделать», «Тойота»].

Первая часть (тип поиска) становится ключом в хэше области, а вторая часть становится поисковым термином.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...