我正在尝试对我从应用程序的API中获得的一系列问题进行分类,并且我想出了一种有效的方法,但它并不令人感觉很棒。谁能告诉我是否有更好的方法来做到这一点?
这是我现在的代码。我并不太担心它是否经过超级优化,但它不应该变慢。
$scope.patron.categories = questions.map(function(question, i) {
// check if question has a new CategoryId
if(i === 0 || (i > 0 && question.CategoryId !== questions[i-1].CategoryId)) {
// put questions with the same CategoryId together
var catQuestions = questions.filter(function(q) {
return q.CategoryId === question.CategoryId;
});
return {
id: question.CategoryId,
name: question.Category,
collapsed: true,
valid: false,
questions: catQuestions
};
}
}).filter(function(category) {
// because Array.prototype.map doesn't remove these by itself
return category !== undefined;
});
答案 0 :(得分:1)
虽然它主要是基于意见的,但我更喜欢简单的循环。
确保它的性能更好,我认为它的可读性也更好。
var catIds = [], cats = [];
questions.forEach(function(q, i) {
var idx = catIds.indexOf(q.CategoryId);
if (idx === -1) {
catIds.push(q.CategoryId);
cats.push({
id: q.CategoryId,
name: q.Category,
collapsed: true,
valid: false,
questions: [q]
});
}
else {
cats[idx].questions.push(q);
}
});
$scope.patron.categories = cats;