Проверьте, нет ли объекта с JavaScript/jQuery
У меня есть такой объект:
ricHistory = {
name1: [{
test1: value1,
test2: value2,
test3: value3
}],
name2: [{
test1: value1,
test2: value2,
test3: value3
}]
};
Теперь я хочу проверить, например, name2 пусто с Javascript/jQuery. Я знаю метод hasOwnProperty
. Он работает для data.hasOwnProperty('name2')
только в том случае, если имя существует или нет, но я должен проверить, является ли его пустым.
Ответы
Ответ 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...)
}