Javascript - 从对象数组中获取不同值的有效方法

时间:2015-10-05 21:14:22

标签: javascript

我正在尝试对我从应用程序的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;
});

1 个答案:

答案 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;