Ярлык, чтобы проверить, являются ли объекты JSON нулевыми

0

Я пишу код для разбора файла JSON. Мне было интересно, есть ли ярлык для проверки того, является ли какой-либо из объектов нулевым и возвращает "Нет информации" для каждого из них, так что мне не нужно повторять '+(item.xxx || 'No Information')+'. Есть ли такой ярлык?

Например, я делаю это, чтобы проверить, является ли объект нулевым:

$(data.items).each(function (index, item) { 
    item_html +='<h3>'+item.title+'</h3><p>'+(item.description || 'No Information')+'<p>'+(item.date || 'No Information')+'<p>'+(item.source || 'No Information')+'<p>'+(item.month|| 'No Information')+';
}

Есть ли лучшая альтернатива?

Теги:

5 ответов

2

Это может быть первая версия:

var na = function(message, def){
  def || (def = 'No Information');
  return message || def;
};

$(data.items).each(function (index, item) { 
   item_html +='<h3>'+item.title+'</h3><p>'+
     na(item.description)+'<p>'+
     na(item.date)+'<p>'+
     na(item.source)+'<p>'+
     na(item.month)+'<p>'
}

Хотя было бы лучше, если бы вы сделали эту логику в своем источнике данных, откуда вы получаете data.items?

  • 0
    def должен быть значением по умолчанию или значением default должно быть def в вашей функции - кроме того, что и я + 1
  • 0
    да, спасибо за исправление
2

написать простую функцию

function s(item){
    if (item==null){
        return "No Inofrmation";
    }else{
        return item;
    }
 }

ПРИМЕНЕНИЕ

$(data.items).each(function (index, item) { 
item_html +='<h3>'+item.title+'</h3><p>'+s(item.description)+'<p>'+s(item.date)+'<p>'+s(item.source)+'<p>'+s(item.month)'</p>';
}
2

jQuery имеет функцию jQuery.isEmptyObject.

$(data.items).each(function (index, item) { 
    if (!jQuery.isEmptyObject(item)) {
        item_html +='<h3>'+item.title+'</h3<p>'+item.description+'<p>'+item.date+'<p>'+item.source+'<p>'+item.month+';
    }
}

Это еще не самая худшая идея проверить каждое свойство, чтобы определить, не определено ли оно. Попробуйте извлечь логику из html-здания, например var itemDate = item.date || "No Information"; var itemDate = item.date || "No Information";

У вас также есть некоторые синтаксические ошибки HTML и Javascript. Закройте теги <p> и закройте строку в конце строки.

  • 0
    Я не понимаю, как это будет работать, если item.description имеет значение null или undefined , у вас не будет No Information
1

вы также можете использовать команду map для предварительной обработки вашего массива.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

var fields = ['title', 'field1', 'flield2'];
items.map(function(item){
    for(var f in fields){
        fn = fields[f];
        if(item[fn] == undefined || item[fn] == null){
            item[fn] = 'No Information';
        }
    }
});
-1

Это своего рода "взлом", но вы можете печатать, а затем заменять все неопределенности неопределенного:

$(data.items).each(function (index, item) { 
    item_html +='<h3>'+item.title+'</h3><p>'+item.description+'<p>'+item.date+'<p>'+item.source+'<p>'+item.month;
}

item_html.split(">undefined<").join(">No Information<");
  • 0
    никогда не используйте подобные хаки - и такие тяжелые, используя разбиения и объединения, а также то, что происходит, если часть возвращаемой информации фактически не определена

Ещё вопросы

Сообщество Overcoder
Наверх
Меню