javascript - 如何按各自的组号对数组中的对象进行分组

标签 javascript arrays angularjs

我已经对数组列表进行了排序,并按各自的组号按顺序排列,但我需要对其进行分组(比方说由领导者和他/她的成员)。我想要有额外的字段,如果对象没有相同的组号,它将自动标记为领导者,因此,如果对象具有相同的组号,序列中的第一个对象将被标记为领导者和其他人将自动标记为成员(member)。

THIS IS MY CODE FOR SORTING MY ARRAY LIST AND IT'S CONSOLE/OUTPUT.

$scope.sortedTopAgent = [];
var c = 0;
var sortTopAgentByGroup = function () {
for (const [index, value] of accountArray.entries()) {
    for (const [index2, value2] of TeamArray.entries()) {
        if (value2.accountname == value) {
            c = c + 1;

            $scope.sortedTopAgent.push(value2); 

            $scope.sortedTopAgent.sort(function (a, b) {
                return a.groupNo - b.groupNo;
            });
            console.log($scope.sortedTopAgent)

            //console >>

            [{
                "name": "John",
                "groupNo": 1
            },
            {
                "name": "Chelsea",
                "groupNo": 1
            },
            {
                "name": "Mark",
                "groupNo": 1
            },
            {
                "name": "Peter",
                "groupNo": 5
            },
            {
                "name": "Arya",
                "groupNo": 5
            },
            {
                "name": "Robert",
                "groupNo": 7
            },
            {
                "name": "Mary",
                "groupNo": 8
            }
        ]
            // end of console
        }
    }
}

};

我想要一个如下所示的数组:

[{
    "name": "John",
    "groupNo": 1,
    "leaderNo": 1,
    "memberNo": ""
  },
  {
    "name": "Chelsea",
    "groupNo": 1,
    "leaderNo": "",
    "memberNo": 1
  },
  {
    "name": "Mark",
    "groupNo": 1,
    "leaderNo": "",
    "memberNo": 1
  },
  {
    "name": "Peter",
    "groupNo": 5,
    "leaderNo": 2,
    "memberNo": ""
  },
  {
    "name": "Arya",
    "groupNo": 5,
    "leaderNo": "",
    "memberNo": 2
  },
  {
    "name": "Robert",
    "groupNo": 7,
    "leaderNo": 3,
    "memberNo": ""
  },
  {
    "name": "Mary",
    "groupNo": 8,
    "leaderNo": 4,
    "memberNo": ""
  }
]

最佳答案

您可以使用 Array#map有办法知道是否已经找到领导者。

在这里,我使用 Array#map 的第二个参数作为一个 Set,它最终成为 map 回调函数内的 this 值。如果需要,我使用 size 属性来确定 leaderNo/groupNo

您可以选择任何方便的方式。

const data = [{
    "name": "John",
    "groupNo": 1
  },
  {
    "name": "Chelsea",
    "groupNo": 1
  },
  {
    "name": "Mark",
    "groupNo": 1
  },
  {
    "name": "Peter",
    "groupNo": 5
  },
  {
    "name": "Arya",
    "groupNo": 5
  },
  {
    "name": "Robert",
    "groupNo": 7
  },
  {
    "name": "Mary",
    "groupNo": 8
  }
];

const output = data.map(function(member) {
  if (this.has(member.groupNo)) {
    // Member
    return {
      ...member,
      "leaderNo": "",
      "memberNo": this.size
    }
  }
  // Leader
  this.add(member.groupNo)
  return {
    ...member,
    "leaderNo": this.size,
    "memberNo": ""
  }
}, new Set())

console.log(output);

关于javascript - 如何按各自的组号对数组中的对象进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55860080/

相关文章:

javascript - 在 ng-click 上将元素从另一个 ng-repeat 推送到 ng-repeat

php - audio.js 音频播放器不适用于 angularjs ng-src

javascript - 如果将属性分配给后备且未指定默认值,会发生什么情况?

Java基于三列对数组进行排序

javascript - 复选框:使用 Array.prototype.forEach.call 推送检查订单,

arrays - 语法错误 : unexpected semicolon or newline, 期待 }

angularjs - Jasmine 使用 [^form] 依赖项测试 Angular 指令

javascript - 如何将 XML 输入从一种格式转换为另一种格式

javascript - 使宽度不相对于父级

javascript - 如何从 Angularjs 模块调用 JSON 文件