2013-08-14 7 views
0

Я использую javascript в своем проекте, и я новичок. У меня есть сценарий, когда я хочу реализовать свойство Status для моего компонента. Это свойство Status показывает текущее состояние моего компонента из списка доступного статуса. Например:Как реализовать эту логику в javascript?

Я реализовал таким образом:

var availableStatus = [ 
          { Name: 'visible' }, 
          { Name: 'hidden' }, 
          { Name: 'deny' }, 
          { Name: 'allow' }, 
          { Name: 'destroy' } 
         ]; 

    var Status = availableStatus[0]; 

    if(Status === availableStatus[0]) 
    //do this 
    else if(Status === availableStatus[1]) 
    //do this 
    ... 

Но я чувствую, что должен быть какой-то другой лучше подходят для этого. И эта логика зависит от порядка элементов массива, который может создать проблему в будущем, если изменяется порядок массива. У меня есть другая логика для реализации этого, используя Named Array. Но я не знаю, как это сделать.

Возможно, кто-нибудь даст мне лучшее предложение реализовать такой сценарий?

ответ

2

Index их по имени (если это является достаточно уникальным):

var availableStatus = { 
         visible : { Name: 'visible' }, 
         hidden : { Name: 'hidden' }, 
         deny : { Name: 'deny' }, 
         allow : { Name: 'allow' }, 
         destroy : { Name: 'destroy' } 
        }; 

var Status = availableStatus.visible; 

if(Status === availableStatus.visible) 
    //do this 
else if(Status === availableStatus.hidden) 
    //do this 

Это предполагает, что есть еще какая-то информация в статусе объектов позже, или функции работают над этими данными. Если вы просто хотите сохранить строку, вы можете просто сделать это так:

var availableStatus = { 
         visible : {}, 
         hidden : {}, 
         deny : {}, 
         allow : {}, 
         destroy : {} 
        }; 

и имеют одинаковую функциональность.

+0

Это то, что я делаю, эффективно, как замена« enum »JavaScript –

0

Как насчет этого? Вы можете хранить дополнительную информацию в словаре, назначенном статусу, например. "can_recieve_messages".

var availableStatus = { 
          'visible': { id: 0 }, 
          'hidden': { id: 1}, 
          'deny' : { id: 2} [...] 
         }; 

    var Status = availableStatus.visible; 

    switch (Status) { 
     case availableStatus.visible: 
      // on visible 
      break; 
     case availableStatus.hidden: 
      // on hidden 
      break; 
     [...] 
    } 
1

Это звучит, как вы хотите использовать switch заявление: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch.

switch(Status) { 
    case 'visible': 
    // do something... 
    break; 
    case 'hidden': 
    // do something else... 
    // etc. 
} 
+0

не работает, так как 'Status' не является' string'. Возможно, вы захотите использовать 'Status.Name' ... – thriqon

0
var availableStatus ={}; 

         availableStatus.['visible']='visible'; 
         availableStatus.['hidden']= 'hidden'; 
         availableStatus.['deny']= 'deny'; 
         availableStatus.['deny']= 'deny' ; 
         availableStatus.['destroy']= 'destroy'; 

У меня есть имя ключа я такое же, как значение, которое вы можете использовать любое имя для ключа и значение

availableStatus.['test']= 'deny' ; 

и вы можете использовать что-нибудь без страха того , если вы пишете availableStatus.destroy то из пут будет уничтожить

и availableStatus.test то на выходе будет deny

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