У меня есть объект со следующей структурой.
var obj = {
"a":{"content": [/*elements*/]},
"b":{
"d":{
"g":{"content":[/*elements*/]},
"h":{
"j":{"content":[/*elements*/]},
"k":{"content":[/*elements*/]}
},
"i":{
"l":{"content":[/*elements*/]}
}
},
"e":{"content":[/*elements*/]},
"f":{"content":[/*elements*/]}
},
"c":{"content":[/*elements*/]},
/* Object goes on with different levels of nesting*/
};
Формат вложенного объекта демонстрирует уникальное поведение - каждый вложенный объект имеет либо 1. одно свойство с именем "content"
значение которого представляет собой одномерный массив элементов, или 2. Вложенные объекты различных уровней, свойства которых в конечном итоге сужаются до (1) выше.
У меня есть рекурсивная функция для поиска content
массивы всего объекта obj выглядят следующим образом:
function search(index) {
for(var key in index) {
var current = index[key];
var cLength = Object.keys(current).length;
if(cLength > 1 ) {
search(current);
} else {
if (index[key]["content"] == undefined) {
search(current);
} else {
contentsArray = index[key]["content"];
// Search Contents Array
}
}
}
}
search(obj);
Фактический объект obj является глубоко вложенным объектом с довольно большим количеством записей данных. Я хочу запустить тесты производительности, чтобы получить среднее время, необходимое для поиска элемента в массиве "contents"
любого из вложенных объектов. У меня вопрос: как распознать последний for...in
l oop родительского объекта obj
при рекурсивном цикле его прохождения? (Для записи конечного sh времени) Есть ли лучший способ рассчитать время выполнения такой функции?
Я пытался указать время, когда for loop
заканчивает цикл через "contents"
массив (для каждого вложенного объекта) в глобальный массив execTime
, затем используя функцию setTimeout
вне функции поиска, чтобы получить разницу между значениями max
и min
в execTime
, поскольку я не являюсь Обязательно, когда функция рекурсивного поиска перестает выполняться.