Не удается проверить объект в объекте

Вы можете попытаться понять это, следуя ниже

// whatever here it is, function or fat arrow or literally object declare
// in short, a pair of curly braces should be appeared here, eg:
function f() {
  // the 'this' here is the 'this' in fat arrow function below, they are
  // bind together right here
  // if 'this' is meaningful here, eg. this === awesomeObject is true
  console.log(this) // [object awesomeObject]
  let a = (...param) => {
    // 'this is meaningful here too.
    console.log(this) // [object awesomeObject]
}

, поэтому «это» в функции толстой стрелки не связано, означает, что вы не можете заставить что-либо связываться с этим «здесь». применить не будет, .call не будет, .bind не будет. 'this' в функции fat arrow привязывается, когда вы записываете текст кода в текстовом редакторе. «Это» в функции толстой стрелки здесь буквально значимо. Что ваш код писать здесь, в текстовом редакторе, то, что ваше приложение работает там в repl. То, что «это» связано с жирным заключением, никогда не изменится, если вы не измените его в текстовом редакторе. Извините за мой пул English ...

0
задан Helle 14 July 2018 в 02:17
поделиться

2 ответа

Для проверки вложенного объекта вы можете использовать рекурсию внутри для Loop.

function check(obj){
    var keys = Object.keys(obj);
    var missingBoxes = [];
    for(let i=0; i<keys.length; i++){
        if(obj[keys[i]]!== ''){
            if(obj[keys[i]].constructor === {}.constructor){
                check(obj[keys[i]]);
             }
        }else{
            missingBoxes.push(keys[i]);
           console.log('blank')
         }
    }
    console.log(missingBoxes);

    }

Шаги:

  1. получить ключи из объекта
  2. проверьте, является ли значение ключа не банковским
  3. , если да, то добавьте его в массив missingBoxes.
  4. , если нет, проверьте, является ли это объектом.
  5. если объект снова проверьте метод проверки вызова.
0
ответ дан Manoj Yadav 17 August 2018 в 12:02
поделиться
  • 1
    проверка не определена – Helle 14 July 2018 в 02:49
  • 2
    проверка функции первой строки определяет ее. поэтому это не должно быть проблемой. вы копируете тело функции. в этом случае вы получите эту ошибку. – Manoj Yadav 14 July 2018 в 02:56
  • 3
    святая корова, это работает! немного изменив его, но у меня есть все ящики в чистом массиве. Обязательно прочитает рекурсивные функции. Спасибо вам @ manoj-yadav – Helle 14 July 2018 в 02:58
  • 4
    один вопрос, я еще не видел .constructor === {}.constructor. Какую роль он играет? – Helle 14 July 2018 в 03:05
  • 5
    для проверки типа значения. вы можете найти более подробно об этом здесь stackoverflow.com/questions/7688070/… и этот для получения дополнительной информации. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… – Manoj Yadav 14 July 2018 в 03:11

Вы можете использовать рекурсию для обработки объекта вложенных требований.

function findMissingKeys(obj, keyPath = null, missingKeys = []) {  
  for(let key in obj) {
    if (typeof obj[key] === 'object') {
      findMissingKeys(obj[key], key, missingKeys)
    } else if (obj[key] === "") {
      if (keyPath) {
        missingKeys.push(`${keyPath}.${key}`);
      } else {
        missingKeys.push(key);
      }
    }
  }
  return missingKeys
}

function validateDepartment() {
  try {
    const textArea = document.getElementById("textArea")
    const departmentObject = JSON.parse(textArea.value)
    const missingKeys = findMissingKeys(departmentObject)
    console.log({ missingKeys })
  } catch(e) {
    alert(e)
  }
}

validateDepartment()
<h4>Department Validator</h4>
<textarea id="textArea" cols=50 rows=10>
  {
    "position": "",
    "name": "",
    "link": "",
    "state": "",
    "requirements": {
      "age": "",
      "citizenship": "",
      "degree": ""
    },
    "salary": "",
    "description": ""
  }
</textarea>
<hr>
<button onclick="validateDepartment()">
  Validate
</button>

0
ответ дан Callam 17 August 2018 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: