【问题标题】:How to group the objects in array by their respective group number如何按各自的组号对数组中的对象进行分组
【发布时间】:2019-04-26 02:39:29
【问题描述】:

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

这是我对数组列表进行排序的代码,它是控制台/输出。

$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": ""
  }
]

【问题讨论】:

    标签: javascript arrays angularjs


    【解决方案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);

    【讨论】:

    • 但是我需要 leaderNo 和 groupNo 等于 1,2,3... 并且它们各自的 groupNo 不相等。
    • @justinhernandez 错过了。我现在已经编辑了代码。
    • 哇哇哇!哥们,你是生命的救星!非常感谢!
    • 你好,伙计,我有一个问题,我最近在我的“数据”数组中添加了一个对象数组,而扩展语法(...成员)没有返回我添加的对象数组。如何在不更改传播语法的情况下完全返回我的“数据”数组
    • const data = [{ "name": "John", "groupNo": 1 }, { "name": "Chelsea", "groupNo": 1 }, { "name": " Mark", "groupNo": 1 }, { "name": "Mary", "groupNo": 8 }, { 教师:[{ "name": "John", "groupNo": 1 }, { "name" : "切尔西", "groupNo": 1 }, { "name": "Mary", "groupNo": 8 }]; } ];
    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2021-11-25
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多