Проверьте, нет ли объекта с JavaScript/jQuery - программирование
Подтвердить что ты не робот

Проверьте, нет ли объекта с JavaScript/jQuery

У меня есть такой объект:

ricHistory = {
  name1: [{
    test1: value1,
    test2: value2,
    test3: value3
  }],
  name2: [{
    test1: value1,
    test2: value2,
    test3: value3
  }]
};

Теперь я хочу проверить, например, name2 пусто с Javascript/jQuery. Я знаю метод hasOwnProperty. Он работает для data.hasOwnProperty('name2') только в том случае, если имя существует или нет, но я должен проверить, является ли его пустым.

4b9b3361

Ответ 1

Попробуйте следующее:

if (ricHistory.name2 && 
    ricHistory.name2 instanceof Array &&
    !ricHistory.name2.length) {
   console.log('name2 is empty array');
} else {
   console.log('name2 does not exists or is not an empty array.');
}

В приведенном выше решении будет показано, существует ли richHistory.name2, это массив и он не пуст.

Ответ 2

вы можете сделать это с помощью jQuery.isEmptyObject()

Убедитесь, что объект пуст (не содержит свойств).

jQuery.isEmptyObject( object )

Пример:

jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false

из JQuery

Ответ 3

Попробуйте эту полезную функцию:

function isEmpty(obj) {
if(isSet(obj)) {
    if (obj.length && obj.length > 0) { 
        return false;
    }

    for (var key in obj) {
        if (hasOwnProperty.call(obj, key)) {
            return false;
        }
    }
}
return true;    
};

function isSet(val) {
if ((val != undefined) && (val != null)){
    return true;
}
return false;
};

Ответ 4

Другой синтаксис JQuery, который вы не используете Prototype или аналогичный, и предпочитаете использовать префикс $, а не jQuery;

$.isEmptyObject( object )

Ответ 5

Вы можете сократить isSet, сделав это вместо этого:

function isSet(val) { return ((val != undefined) && (val != null));}

Мне легче просто вернуть логическое выражение, а не передавать, а затем вернуться.

Ответ 6

Я все время хожу в моем коде:

Предположим, что мой контроллер возвращает что-то вроде ниже:

$return['divostar'] = $this->report->get_additional_divostar_report($data);
$return['success'] = true;
return response()->json($return);

В JQuery я бы посмотрел, как показано ниже:

if (jQuery.isEmptyObject(data.divostar)){
      html_result = "<p id='report'>No report yet</p>";
      $('#no_report_table').html(html_result).fadeIn('fast');
} 

Ответ 7

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

Примеры:

empty([]) // => true
empty({}) // => true
empty(1) // => false
empty('') // => false
empty('foo') // => true

Как это работает:

function isEmpty(obj: any): boolean {
  for (const n in obj) if (hasOwnProperty(obj, n) && obj[n]) return false; // eslint-disable-line
  return true;
};

Ответ 8

if (ricHistory.name2 === undefined) {
   //This is property has not been set (which is not really the same as empty though...)
}