Просто для удовольствия, я бы так сделал. Это пересмотр алгоритмов DOM Дугласа Крокфорда.
Во-первых, рекурсивная функция (visit()
), которая посещает произвольный объект и применяет произвольную функцию к каждому члену:
function visit(obj, func)
{
for (k in obj)
{
func(obj, k);
if (typeof obj[k] === "object")
{
visit(obj[k], func);
}
}
}
Это рабочий пример с функцией полезной нагрузки, которая просто выводит найденные функции на консоль:
var testdata = {
"a": 1,
"b": "hello",
"c": [ 1, 2, 3 ],
"d": (x) => 2 * x,
"e": null,
"f": {
"x": 10,
"y": {
"z": "$$$",
"zz": (x) => 0
}
}
};
function visit(obj, func)
{
for (k in obj)
{
func(obj, k);
if (typeof obj[k] === "object")
{
visit(obj[k], func);
}
}
}
visit(testdata, (obj, k) => {
if (typeof obj[k] === "function")
{
console.log(k + " is a function");
}
});
Как показывает приведенный выше код, функция полезной нагрузки func
способна находить все и только функции в объекте.
Все, что нам сейчас нужно, это функция, которая удаляет член, но сейчас это очень просто:
(obj, k) => {
if (typeof obj[k] === "function")
{
delete obj[k];
}
}
Отделяя посещение от полезной нагрузки, вы можете использовать его многими способами и манипулировать рекурсивными объектами для всех видов потребностей ...