2015-03-19 6 views
0

У меня есть объект с следующей разметкой:Object - проверка, если поле существует

Object {workout: Object} 
    workout: Object 
    1/12/2015: Array[3] 
     0: "workoutTitle0" 
     1: "workoutTitle1" 
     2: "workoutTitle2" 
    2/12/2015: Array[3] 
    3/12/2015: Array[3] 
    4/12/2015: Array[3] 
    5/12/2015: Array[3] 
    6/12/2015: Array[3] 
    7/12/2015: Array[3] 

Я хочу, чтобы проверить, если, например, поле 10/12/2015 существует - если существует я хочу, чтобы загрузить массив, это поле удерживает, если не создает новый пустой массив для этого поля.

Я попробовал этот код, но я получаю ложные каждый раз, даже если поле не существует:

function isEmpty(obj) { 
    var prop = '10/12/2015' 
    for(prop in obj) { 
     if(obj.hasOwnProperty(prop)) 
      return false; 
    } 
    return true; 
} 

Вот если JSFiddle:

https://jsfiddle.net/x9dnwgwc/3/

+1

Если вы взаимодействуете с объектом в памяти, это не JSON, это просто объект. JSON является * текстовой * нотой для обмена данными. –

+0

В вашем браузере встроен полнофункциональный отладчик: используйте меню, чтобы открыть отладчик, или в большинстве браузеров это F12 и/или Ctrl + Shift + I (Cmd + Shift + I на компьютерах Mac). Отладчик позволит вам выполнить код по очереди за раз («один шаг» через ваш код) и позволит вам увидеть, что находится в ваших переменных при прохождении. Очень полезно для понимания того, что происходит. –

ответ

2

Я хочу, чтобы проверить, например, поле 10/12/2015 существует

Вы работаете слишком сложно, это просто:

if (obj.hasOwnProperty('10/12/2015')) { 
    // It exists in the object itself 
} 

... для «своей» собственности, или

if ('10/12/2015' in obj) { 
    // It exists in the object or one of its prototypes 
} 

... для свойства, которое его собственной или он наследует от прототип.

Я попробовал этот код, но я получаю ложные каждый раз, даже если поле не существует:

function isEmpty(obj) { 
    var prop = '10/12/2015' 
    for(prop in obj) { 
     if(obj.hasOwnProperty(prop)) 
      return false; 
    } 
    return true; 
} 

Ваш

var prop = '10/12/2015'; 

строка объявляет переменную prop, и присваивает ему значение «10/12/2015»; но тогда вы сразу перезаписать это значение с:

for(prop in obj) { 

Первое, что цикл for-in будет делать это перезаписать значение prop.

Какова была ваша петля, проверяя, есть ли у объекта какие-либо «собственные» свойства (если это так, он возвращал false) или только свойства, которые он унаследовал от своего прототипа (если это так, он вернул true) «).

+0

Проверил еще раз, и еще что-то перепуталось https://jsfiddle.net/x9dnwgwc/4/ Он возвращает истину, даже если опора существует в объекте ... – marcinf2

+0

@ marcinf2: Вы ищете на ' jsonObj'. Это не на 'jsonObj', это на' jsonObj.workout': https://jsfiddle.net/x9dnwgwc/6/ (И снова, как побочная заметка, JSON здесь не участвует. Это просто объект.) –

+0

@ marcinf2: Это 'if (obj.hasOwnProperty (prop)) {return false; } else {return true; } 'можно, конечно, написать' return! obj.hasOwnProperty (prop); ' –

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