2015-12-23 8 views
1

Может ли быть много свойств в объекте js?Слишком много свойств в объекте js

Я хочу построить сайт, похожий на workaway.info, и я думаю о том, как создать компонент поиска. В расширенных параметрах поиска у них есть около 30 флажков для различных видов работы. В каждый список вакансий можно включить несколько типов работ.

Было бы типично иметь свойство boolean для каждого флажка в объекте или в одном array, содержащем вход boolean для всех вариантов?

Любая причина выбора одного над другим?

... 
//Method 1: 
function Job(theCompany, thePosition){ 
    this.company = theCompany; 
    this.position = thePosition; 
    this.isMedical = true; 
    this.isAdministrative = true; 
    this.isLaw = false; 
    ... 
    } 

//Method 2: 
function Job(theCompany, thePosition){ 
    this.company = theCompany; 
    this.position = thePosition; 
    this.typeOptions = [true, true, false...]; 
    ... 
    } 

ответ

2

Вообще, the property limit 65535. Поскольку вы не попали, что предел, ваш вопрос чисто стиль.

Я думаю, что мой предпочтительный способ сделать это - иметь массив строковых флагов. Например:

function Job(theCompany, thePosition) { 
    this.company = theCompany; 
    this.position = thePosition; 
    this.typeOptions = ['medical', 'administrative']; 
} 
0

метод Пика 1: для простого поддержания кода, любой читать ваш код будет точно знать, какое значение означает,

0

Я предпочел бы method 1, поскольку это дает разработчику доступ к имени свойства в каком-то осмысленно по его имени, которое имеет смысл, а не путем индексации массива. Этот метод помогает разработчику лучше отлаживать его в будущем. Если вы используете массив, разработчик полностью ретранслирует ваши комментарии и бизнес-логику, чтобы узнать точную цель каждого элемента массива, затрудняющего отладку. Method 1 помогает очень хорошо отлаживать, а также следовать стандарту, что каждая переменная должна иметь какое-то значимое имя.

1

Здесь нет идеального ответа, и он сильно изменится на основе стиля программирования.

Одна вещь, с которой я бы посоветовал, - это ваш второй вариант, в буквальном смысле;

options = [ true, true, true, true, false, true, true, false, false, false, false, /*...*/]; 

Невозможно понять, что делает каждый из них, сохраняя при этом в контексте кода.

Булевы свойства на одном объекте прекрасны, но становятся громоздкими, когда вы говорите о десятках, не говоря уже о десятках тысяч свойств, на одном объекте, на том же уровне вложенности.

В более современных браузерах (или более старых браузерах с полисалями ES5), я считаю, что это главный кандидат в Set;

var options = new Set(); 

form.onchange = function (e) { 
    var el = e.target; 
    if (isCheckbox(el)) { 
    if (el.checked) { 
     options.add(el.value); 
    } else { 
     options.delete(el.value); 
    } 
    } 
}; 

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

В больших приложениях, имеющих общий подход, где данные передаются в каркас (React/Angular/Ember/etc/hand-made), который автоматически создает вашу форму, прослушивает события и вытягивает значения из динамически- построенная таким образом страница, делает ее немного труднее рассуждать, но также значительно упрощает добавление, удаление или изменение параметров в будущем, как только код, отображающий эту опцию, и код, который использует ценность должна заботиться.

const formOptions = [ 
    { label: "Medical", value: "medical" }, 
    { label: "Legal", value: "legal" } 
]; 

const form = buildForm(formOptions); 
/* ...previous code... */ 
form.onsubmit = function() { 
    Array.from(options). /* map, filter, forEach, reduce, etc */(...); 
}; 

Остальная часть кода, между прочим, является просто проводкой.

Опять же, не идеально; не единственный ответ, а один, и почему.

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