Как правильно перебрать JS объект?

Есть объект, который содержит следующую информацию:
db_obj = {
	1: { // ID категории 1
		21 : {
			id 	: 21, // ID пользователя
			parent	: 1, // К какой категории относится
			name 	: 'Тест 21' // Фио
		},
		23 : {
			id 	: 23,
			parent	: 1,
			name 	: 'Тест 23'
		}
	},
	2: { // ID категории 2
		23 : {
			id 	: 23,
			parent	: 2,
			name 	: 'Тест 23'
		},
		22 : {
			id 	: 22,
			parent	: 2,
			name 	: 'Тест 22'
		}
	}
};

Необходимо получить новый объект, в котором будут находиться ID пользователей и ID категорий к которым они относятся (в виде массива).
Пример:

new_obj = {
	21: [1], // пользователь 21 в категории 1
	23: [1,2], // пользователь 23 в категории 1 и 2 
	22: [2] // пользователь 22 в категории 2
};


Пытаюсь реализовать следующим циклом, но не выходит собрать все ID категорий в которых находится пользователь:

var new_obj = {};
$.each(db_obj, function(i) {
	$.each(this, function() {
		new_obj[this.id] = this.parent;
	});
});
console.log(new_obj);
'

Прошу навести на мысль, как правильно решить задачку?
Спасибо.
  • Вопрос задан
  • 9277 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
var map = {};
for (var categoryId in db_obj) {
    if (!db_obj.hasOwnProperty(categoryId)) continue;
    var entry = db_obj[categoryId];
    for(var userId in entry) {
        if(!entry.hasOwnProperty(userId)) continue;
        if(!map.hasOwnProperty(userId)) {
             map[userId] = [];
        }
        map[userId].push(categoryId);
    }
}


Но с lodash/underscore вышло бы элегантнее...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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