我已经对数组列表进行了排序,并按照它们各自的组号进行了排列,但是我需要对其进行分组(由领导者及其成员说)。我想要额外的字段,如果对象没有相同的组号,它将自动标记为领导者,因此,如果对象具有相同的组号,则序列中的第一个对象将被标记为领导者,并且其他将被自动标记为成员。
这是我用于排列阵列列表的代码,它是控制台/输出。
$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": ""
}
]
答案 0 :(得分:1)
您可以使用Array#map来确定是否已找到领导者。
在这里,我将Array#map的第二个参数用作Set
,最终成为地图回调函数中的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);