динамически проверять свойство json

#javascript

#javascript

Вопрос:

Как правильно передать propertyName функции isValid(), чтобы я мог проверить, не пусто ли оно? Когда я напрямую проверяю ‘searchInside.attendeeList’, это работает!

 function isValid(searchInside, propertyName) {
  if(searchInside.propertyName)
    console.log("this doesnt work");
  if(searchInside.attendeeList)
    console.log("this works");
}
var requestBody = {
    "meetingType": "Company",
    "emailSendingReason": "CREATED",
    "attendeeList": [
        {
            "employeeId": "12345",
            "employeeDisplayName": "abc, xyz",
            "callInFlag": false,
            "infoPackRequiredFlag": true,
            "inviteForInfoOnly": true
        },
        {
            "employeeId": "374684678",
            "employeeDisplayName": "xyz, poi",
            "callInFlag": true,
            "infoPackRequiredFlag": true,
            "inviteForInfoOnly": false
        }
    ],
    "thirdPartyAttendee": {}
};
isValid(requestBody, 'attendeeList');
  

Ответ №1:

Вы уже правильно передаете его в виде строки. Внутри вашей функции isValid() вы можете ссылаться на нее следующим образом:

 function isValid(searchInside, propertyName) {
  if(searchInside[propertyName]){
    console.log("this works");
  }
}
  

Ответ №2:

Попробуйте searchInside.hasOwnProperty(propertyName) . Object hasOwnProperty() проверяет наличие ключа объекта и возвращает логический результат.

 function isValid(searchInside, propertyName) {
  if(searchInside.hasOwnProperty( propertyName)){
    console.log("this works");
  } else console.log("this doesn't work");
}

var requestBody = {
    "meetingType": "Company",
    "emailSendingReason": "CREATED",
    "attendeeList": [
        {
            "employeeId": "12345",
            "employeeDisplayName": "abc, xyz",
            "callInFlag": false,
            "infoPackRequiredFlag": true,
            "inviteForInfoOnly": true
        },
        {
            "employeeId": "374684678",
            "employeeDisplayName": "xyz, poi",
            "callInFlag": true,
            "infoPackRequiredFlag": true,
            "inviteForInfoOnly": false
        }
    ],
    "thirdPartyAttendee": {}
};
isValid(requestBody, 'attendeeList');

  

Комментарии:

1. да, я использовал hasOwnProperty() для проверки наличия свойства. Теперь я хочу проверить, не является ли свойство пустым. И для этого я использую Object.keys(searchInside.propertyName).length !== 0 то, что требуется (searchInside.propertyName) для работы.

2. Попробуйте это. searchInside[propertyName].length !== 0

Ответ №3:

 function isValid(searchInside, propertyName) {
  if(typeof searchInside[propertyName] !== 'undefined')
    console.log("this doesnt work");
  if(searchInside.attendeeList)
    console.log("this works");
}