2017-01-05 3 views
0

У меня есть массив с числами и объектами, например:Проверка объектов с определенной парой ключей/значений в переключатель заявлении Javascript

var array = [0,0,1,0,2, {type:player, health:100, xp: 0}, 0,2,1,0, {type:weapon, damage:20}] 

Тогда I цикл по массиву и задать строку в переменной, что я использовать для динамического набора классов.

На данный момент у меня есть следующий цикл с помощью переключателя заявление:

for(var i = 0; i < array.length; i++){ 

     var setClass = ""; 

     switch (array[i]) { 

      case 1: 
      setClass = "walkable"; 
      break; 
      case 2: 
      setClass = "wall"; 
      break; 
      default: 
      setClass = "outside" 

     } 
} 

То, что я хочу сделать, это в чеке переключатель заявление, если элемент в петле 1) объект и 2) с определенным пара ключей/значений ?. Поэтому я хотел бы установить строку для чего-то типа: player и что-то еще для типа: weapon. Как я могу это сделать?

+0

первую очередь, использовать цикл по каждому элементу. Кстати, это хороший пример для алгоритма mapReduce из реактивных расширений. – alpham8

+0

. Быстрый вопрос: хотите ли вы включить значения массива? или вы хотите включить индекс массива? 'coz на данный момент вы переходите на индексы –

+0

http://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript относительно # 1 –

ответ

0

Вы можете использовать в цикле

array.forEach(function(element) { 
    if (element.hasOwnProperty('type')) { 
      switch (element.type) { 
       case "player": 
       ... 
       break; 
       case "weapon": 
       ... 
       break; 
       default: 
       ... 
      } 
    } 
}); 
1

Я надеюсь, что это то, что вы ожидаете.

var array = [0,0,1,0,2, {type:player, health:100, xp: 0}, 0,2,1,0, {type:weapon, damage:20}] 

for(var i = 0; i < array.length; i++){ 

     var setClass = ""; 

     switch (array[i]) { 

      case 1: 
      setClass = "walkable"; 
      break; 
      case 2: 
      setClass = "wall"; 
      break; 
      default: 
      if (Object.prototype.toString.call(array[i]) === '[object Object]'){ 
       //This means the value is an Object 
       //And here you can check its type like 
       if (array[i].type === 'player') { 
        //Do something 
       } 
      } 
      setClass = "outside" 

     } 
} 
0

Надежда это то, что вы пытаетесь достичь:

for(var i = 0; i < array.length; i++){ 

    var setClass = ""; 
    if(array[i] !== null && typeof(array[i]) === "object"){ 

     switch (array[i]) { 

     case "player": 
     setClass = "walkable"; 
     break; 
     case "weapon": 
     setClass = "wall"; 
     break; 
     default: 
     setClass = "outside" 

    } 
    } 
} 
+0

'typeof' - это оператор, поэтому нужно'() ', И также возвращает' object' для значений 'null'. Так что это может закончиться ошибкой –

+0

@AkhilArjun: Извините, это опечатка. Исправлено. – superUser

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