2015-11-28 2 views
0

Хорошо, это название будет звучать немного сумасшедшим. У меня есть объект, который я создаю из множества входов (от пользователя). Я устанавливаю их в соответствии с полученным значением, но иногда они не установлены вообще, что делает их нулевыми. Что я действительно хочу сделать, он создает генератор элементов для WoW. Элементы могут иметь несколько атрибутов, которые все выглядят одинаково для пользователя. Вот мой пример:Как установить if-statement с несколькими условиями, в которых используется переменная valid condition в if-statement?

+3 Agility 
+5 Stamina 
+10 Dodge 

В теории, что нужно просто взять имя свойства моего объекта и значение ключа, а затем выводит его в той же манере. Однако как настроить этот if-statement?

Вот что мое текущее если-заявление MADNESS выглядит следующим образом:

if(property == "agility") { 
    text = "+" + text + " Agility"; 
} 
if(property == "stamina") { 
    text = "+" + text + " Stamina"; 
} 
if(property == "dodge") { 
    text = "+" + text + " Dodge"; 
} 

Вы получаете это право точки? В WoW есть A TON атрибутов, поэтому он будет сосать, что мне придется создавать if-statement для каждого, потому что их просто слишком много. Он в основном повторяется, но все еще использует имя свойства полностью. Вот что мой JSFiddle выглядит так: http://jsfiddle.net/pm2328hx/, чтобы вы могли играть с ним сами. Благодаря!

EDIT: Да, кстати, то, что я хочу сделать что-то вроде этого:

if(property == "agility" || property == "stamina" || ....) { 
    text = "+" + text + " " + THE_ABOVE_VARIABLE_WHICH_IS_TRUE; 
} 

Что Hacky, а также. Я определенно этого не хочу.

+0

Существуют ли свойства, которые не приведут к добавив его в текст? Если да, почему бы не просто что-то вроде 'text =" + "+ text +" "+ property;' – Prescott

+0

@Prescott Я мог бы это сделать, но элемент указан как 'object.name =" Name "и' object.agility = 10' и т. Д. Будет ли он работать, если бы я сделал объект object.attribute.agility = 10'? – MortenMoulder

ответ

2
if(['agility','stamina','dodge'].indexOf(property) !== -1){ 
    text = "+" + text + " " + property; 
} 

Если вам нужна первая буква капитализируются:

if(['agility','stamina','dodge'].indexOf(property) !== -1){ 
    text = "+" + text + " " + property.charAt(0).toUpperCase() + property.substr(1); 
} 

UPDATE на комментарий:

Если у вас уже есть массив всех атрибутов где-то, использовать вместо

var myatts = [ 
    'agility', 
    'stamina', 
    'dodge' 
]; 
if(myatts.indexOf(property) !== -1){ 
    text = "+" + text + " " + property.charAt(0).toUpperCase() + property.substr(1); 
} 

ОБНОВЛЕНИЕ на следующий комментарий:

Если у вас уже есть объект с атрибутами, как ключи, вы можете использовать Object.keys(), но не забудьте также использовать hasOwnProperty

var item = {}; 
item.attribute = { 
    agility:100, 
    stamina:200, 
    dodge:300 
}; 
var property = "agility"; 
var text = ""; 
if(Object.keys(item.attribute).indexOf(property) !== -1){ 
    if(item.attribute.hasOwnProperty(property)){ 
     text = "+" + text + " " + property.charAt(0).toUpperCase() + property.substr(1); 
    } 
} 

Fiddle:http://jsfiddle.net/trex005/rk9j10bx/

UPDATE ответить намеченный вопрос вместо задаваемый вопрос

Как я Expan d следующий объект в следующую строку? Примечание: атрибуты являются динамическими.

Объект:

var item = {}; 
item.attribute = { 
    agility:100, 
    stamina:200, 
    dodge:300 
}; 

Строка:

+ 100 Agility + 200 Stamina + 300 Dodge 

Ответ:

var text = ""; 
for(var property in item.attribute){ 
    if(item.attribute.hasOwnProperty(property)){ 
     if(text.length > 0) text += " "; 
     text += "+ " + item.attribute[property] + " " + property.charAt(0).toUpperCase() + property.substr(1); 
    } 
} 
+0

Предположим, что существует 100 атрибутов, таких как 'agility',' stamina' и 'dodge'. Тогда мне придется перечислить их всех? – MortenMoulder

+0

Я надеюсь, что у вас уже есть их в массиве. Как я их перечислил, просто с помощью массива. – trex005

+0

Массив в основном те, что я получаю от пользователя. Если это сработает, можно ли установить его так? 'item.attribute.agility' возможно? Тогда у меня в основном есть свой массив атрибутов внутри 'item.attribute' – MortenMoulder

1

Неясно, как вы получаете эти значения хранить их внутри - но если вы храните их в хеш-таблице:

properties = { stamina: 10, 
       agility: 45, 
       ... 
      } 

Тогда вы могли бы показать ему что-то вроде этого:

var text = ''; 
for (var key in properties) { 
// use hasOwnProperty to filter out keys from the Object.prototype 
    if (h.hasOwnProperty(k)) { 
     text = text + ' ' h[k] + ' ' + k + '<br/>'; 
    } 
} 

После чата код вышел следующим образом:

var item = {}; 
item.name = "Thunderfury"; 
item.rarity = "legendary"; 
item.itemLevel = 80; 
item.equip = "Binds when picked up"; 
item.unique = "Unique"; 
item.itemType = "Sword"; 
item.speed = 1.90; 
item.slot = "One-handed"; 
item.damage = "36 - 68"; 
item.dps = 27.59; 
item.attributes = { 
    agility:100, 
    stamina:200, 
    dodge:300 
}; 
item.durability = 130; 
item.chanceOnHit = "Blasts your enemy with lightning, dealing 209 Nature damage and then jumping to additional nearby enemies. Each jump reduces that victim's Nature resistance by 17. Affects 5 targets. Your primary target is also consumed by a cyclone, slowing its attack speed by 20% for 12 sec."; 
item.levelRequirement = 60; 

function build() { 
    box = $('<div id="box">'); //builds in memory 
    for (var key in item) { 
     if (item.hasOwnProperty(key)) { 
      if (key === 'attributes') { 
       for (var k in item.attributes) { 
        if (item.attributes.hasOwnProperty(k)) { 
         box.append('<span class="' + k + '">+' + item.attributes[k] + ' ' + k + '</span>'); 
        } 
       } 
      } else { 
       box.append('<span id="' + key + '" class="' + item[key] + '">' + item[key] + '</span>'); 
      } 
     } 
    } 

    $("#box").replaceWith(box); 
} 

build(); 

http://jsfiddle.net/gp0qfwfr/5/

+0

Хранение их, как это, вероятно, гораздо лучше. Я обязательно пойду с этим, а не с объектом, как сейчас. – MortenMoulder

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