2015-06-15 2 views
0

У меня есть объект. И то, что я хочу сделать, это поиск внутри объекта для идентификатора и возврат его элементов. Каков мой лучший способ действий для чего-то подобного?Поиск в объекте и возвращаемых элементах

Проникнуть через объект и проверить каждый идентификатор?

var questions = [ 
{ 
    id   : 'citizenship-1', 
    category : 'citizenship', 
    label  : 'Are you an American Citizen?', 
    options  : ['Yes','No'], 
    forceAnswer : false 
    }, 
{ 
    id   : 'citizenship-2', 
    category : 'citizenship', 
    label  : 'Do you live in the United States?', 
    options  : ['Yes','No'], 
    forceAnswer : false 
} 
]; 

Так что я хочу сделать, это сказать, мой яваскрипта функцию для поиска гражданству-2 в вар вопросов и вернуться Ид, категория, этикетки и т.д.

{ 
id   : 'citizenship-2', 
category : 'citizenship', 
label  : 'Do you live in the United States?', 
options  : ['Yes','No'], 
forceAnswer : false 
} 

Я в первую очередь с использованием javascript, но также доступны jQuery, если есть лучшее решение внутри.

ответ

1

Вы можете использовать .filter() функцию фер получения объекта с заданным значением

var filtered = $(questions).filter(function (i, n) { 
    return n.id === 'citizenship-2'; 
}); 
console.log(filtered[0].category); 

Fiddle

0

Просто немного веселья с фильтром:

var questions = [ 
{ 
    id   : 'citizenship-1', 
    category : 'citizenship', 
    label  : 'Are you an American Citizen?', 
    options  : ['Yes','No'], 
    forceAnswer : false 
    }, 
{ 
    id   : 'citizenship-2', 
    category : 'citizenship', 
    label  : 'Do you live in the United States?', 
    options  : ['Yes','No'], 
    forceAnswer : false 
} 
]; 

var id = 'citizenship-1'; 
var res = questions.filter(function(e) { 
    return e.id == id && e; 
}, []); 

console.log(res); 

Таким образом, если есть дубликаты, они будут в массиве.

Fiddle: http://jsfiddle.net/mj65n06y/

(результаты в консоли)

Выход:

http://prntscr.com/7h8152 enter image description here

+0

@mplungjan: идея заключается в том, чтобы вернуть массив объектов, так что, если есть дубликаты вы можете обнаружить их, поэтому я добавил, [], что случилось? – briosheje

+0

Я понимаю, что вы сделали, но пользователь просит получить элементы. Я хотел бы видеть, что выполняет '&& e'. Моя версия http://jsfiddle.net/mplungjan/b735wcbb/ – mplungjan

+0

@mplungjan: ну, ваше решение наверняка выглядит лучше. && e утверждает, что e.id равно id. Если это так, он возвращает весь объект (он вставляет его в новый массив []), иначе он буквально ничего не делает, это именно то, что он делает. В то время как мое решение просто возвращает массив, содержащий объект (ы), ваше решение предоставляет самому объекту свойства, готовые к использованию. – briosheje

0

Попробуйте функции JQuery в $ .param (объект):

var questions = [ 
 
{ 
 
    id   : 'citizenship-1', 
 
    category : 'citizenship', 
 
    label  : 'Are you an American Citizen?', 
 
    options  : ['Yes','No'], 
 
    forceAnswer : false 
 
    }, 
 
{ 
 
    id   : 'citizenship-2', 
 
    category : 'citizenship', 
 
    label  : 'Do you live in the United States?', 
 
    options  : ['Yes','No'], 
 
    forceAnswer : false 
 
} 
 
]; 
 

 
window.search = function() { 
 
    var object; 
 
    for (q in questions) 
 
    { 
 
    if (questions[q].id == $('#query').val()) 
 
     object = questions[q]; 
 
    } 
 
    
 
    alert($.param(object)); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="query" placeholder="Type Object ID" /> 
 
<button onclick="search()">Search</button>

Смежные вопросы