Вы можете попытаться понять это, следуя ниже
// 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 ...
Для проверки вложенного объекта вы можете использовать рекурсию внутри для 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);
}
Шаги:
Вы можете использовать рекурсию для обработки объекта вложенных требований.
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>
.constructor === {}.constructor
. Какую роль он играет? – Helle 14 July 2018 в 03:05