Напишите стрелочную функцию, которая принимает объект, узнаёт сколько у него полей и методов, выводит все поля. И возвращает количество методов.
На данный момент сделал, только вот это:
let data = {
name: 'Корегин',
age: 18,
getHobby: function() {
console.log('Корегин - это Будущий Senior-программист');
}
};
let properties = 0;
let dataInfo = (dataInfoObject) => {
for (var key in data) {
properties++
console.log(key);
};
};
console.log('Все свойства: ');
dataInfo(data)
console.log('Всего свойств: ' + properties);
Мне осталось вывести, только поля и вернуть методы. Какие есть варианты ?
С помощью typeof
можно определить тип. Если typeof
вернёт function
, значит нам попался метод. Иначе - свойство.
let data = {
name: 'Корегин',
age: 18,
getHobby: function() {
console.log('Корегин - это Будущий Senior-программист');
}
};
let dataInfo = (dataInfoObject) => {
let properties = 0, methods = 0;
for (var key in data) {
if (typeof data[key] === "function")
methods += 1;
else properties += 1;
};
return [properties, methods];
};
console.log('Все свойства: ');
let res = dataInfo(data);
console.log('Всего свойств: %d, всего методов: %d', res[0], res[1]);
Если для инстанса класса, то можно вот так (хоть я и не уверен в корректности подхода):
class SomeClass {
constructor () {
this.some = 0;
this.test123 = 123;
}
method () {
}
}
let getCount = (classInstance) => {
let methods = Object.getOwnPropertyNames(Object.getPrototypeOf(classInstance)).length,
properties = Object.keys(classInstance).length;
return [methods, properties]
}
let a = new SomeClass();
const res = getCount(a);;
console.log('Свойства: %d, методы: %d', res[1], res[0]);
let data = {
name: 'Корегин',
age: 18,
getHobby: function() {
console.log('Корегин - это ...');
}
};
let dataInfo = (data) => {
var res = { properties: [], methods: [] };
for (var key in data) {
if (typeof data[key] == "function") {
res.methods.push({name: key, value: data[key]});
} else {
res.properties.push({name: key, value: data[key]});
}
}
return res;
};
var result = dataInfo(data);
console.log("Properties:", result.properties.length);
console.log("Methods:", result.methods.length);
console.log("All:", result);
var obj = new class {
constructor() {
this.name = 'Корегин';
this.age = 18;
}
getHobby() {
console.log('Корегин - это Будущий Senior-программист');
}
};
console.log('Все свойства:',
Object.keys(obj)
);
console.log('Все методы:',
Object.getOwnPropertyNames(Object.getPrototypeOf(obj))
.filter(name => name !== "constructor" && typeof obj[name] === "function")
);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Почему select не правильно отобразился? Хотя он и там и там один и тот же