2015-06-13 3 views
0

Я хотел бы уменьшить количество IF заявления в моем коде:Как перебрать конкретные свойства объекта

http://jsfiddle.net/b0ftLujj/

Слишком многие свойства повторяются, что является проблемой.

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

myObject ={ property_1: myValue_1, property_2: myValue_2, otherProperty_1: myValue_1 };

На основании выше объекта, я хочу итерацию только через property_1, property_2, игнорируя otherProperty_1.

В моем объекте могут быть свойства "property_x" (до 5) или вообще отсутствуют. Я пытался сделать, если заявление, которое было бы что-то вроде этого псевдокода:

for(var statName in myObject){ 
    If(myObject has any property called : 'property_1, property_2, property_3, property_4, property_5'.indexOf(statName) != -1;) 
    //Then display in html: '<img src="images/' + property_x(where x is a property 1/2/3/4 or 5) and it would display only available properties in current object. I can make it work with an 5x if else statements to check for every property, since there cannot be property_1 and property_3/4/5 if "2" is missing. I was looking for a better way to display it. 
    } 
} 

Ответ с использованием JavaScript будет лучшим, но JQuery нас вариант тоже.
Любые ссылки с материалами, которые я могу использовать, чтобы узнать больше, приветствуются.

Благодаря

ответ

1

Не уверен, что я понимаю вторую часть вашего вопроса, но вот упрощенная версия вашего fiddle:

var randomNumber = Math.floor((Math.random() * 100) + 1); 
 
if (dropItem.itemType === "weapon") { 
 
    dropItem["materiaSlot_1"] = 'empty'; 
 
    if (randomNumber >= 40) dropItem["materiaSlot_2"] = 'empty'; 
 
    if (randomNumber >= 60) dropItem["materiaSlot_3"] = 'empty'; 
 
    if (randomNumber >= 80) dropItem["materiaSlot_4"] = 'empty'; 
 
    if (randomNumber >= 95) dropItem["materiaSlot_5"] = 'empty'; 
 
};

+0

Эй, спасибо :) То, что я искал. О второй проблеме проверьте мой комментарий ниже, это должно объяснить это немного лучше, я думаю. – Mariusz

1

Я не уверен, если я полностью понимаете, но ваш псевдокод на самом деле очень важен :-). Вы можете выполнять итерацию по каждому объекту с помощью инструкции for prop in obj (вы также должны проверить, является ли это собственностью объекта) и получить значение этого свойства с помощью кода obj[prop].

for (var prop in obj) { 
    if (obj.hasOwnProperty(prop)) { 
     html += '<img src="' + obj[prop] + '" />'; 
    } 
} 

Вот скрипка для этого http://jsfiddle.net/b0ftLujj/1/

+0

Эй, я знаю об этом коде, но проблема в том, что у моего объекта около 30 свойств, я хочу проверить, есть ли у него эти определенные свойства «property_1, property_2, property_3, property_4, property_5» и запустить код на основе этих свойств, поэтому он будет похож на ваш код, но будет искать только те свойства. Надеюсь, теперь вы можете понять это лучше: P – Mariusz

+0

И вы знаете эти параметры по имени? Почему бы вам просто не пройти через них. http://jsfiddle.net/b0ftLujj/2/ –

+0

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

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