组将javascript数组中的值一起复制,然后按值名称升序对这些组进行排序

Ale*_*FF1 3 javascript arrays sorting typescript angular

我有一个对象数组,我必须循环并按属性名称"tagColor"分组重复值,然后我需要按名称排序的分组对象.我实现了按颜色排序的第一步,现在我需要按名称对这些组进行排序,在angular 4,typescript中实现

这是数组列表

 tags =    [
      {
        "tagType": {
          "name": "a",
          "tagColor": "#0000FF"
        }
      },
      {

        "tagType": {
          "name": "a",
          "tagColor": "#FF0000"
        }
      },
      {

        "tagType": {
          "name": "c",
          "tagColor": "#FF0000",
        }
      },
      {
        "tagType": {
          "name": "b",
          "tagColor": "#FF0000",
        }
      },
      {
        "tagType": {
          "name": "b",
          "tagColor": "#0000FF",
        }
      }
    ]
Run Code Online (Sandbox Code Playgroud)

我的函数按tagColor排序:

tags.sort((a, b) => a.tagType.tagColor.localeCompare(b.tagType.tagColor));
Run Code Online (Sandbox Code Playgroud)

这个仅按颜色分组,但如何按字母顺序对这些组进行排序?

在此输入图像描述

Tit*_*mir 7

您可以使用单个排序调用,如果比较标记的结果为0,则按名称进行比较:

tags.sort((a, b) => {
    let result = b.tagType.tagColor.localeCompare(a.tagType.tagColor);
    if(result == 0) {
        return a.tagType.name.localeCompare(b.tagType.name);
    }
    return result;
});
Run Code Online (Sandbox Code Playgroud)

或者更简洁但可读性更低的版本:

tags.sort((a, b) =>
    b.tagType.tagColor.localeCompare(a.tagType.tagColor) // if this is 0 (aka falsy) return the other value
        || a.tagType.name.localeCompare(b.tagType.name));
Run Code Online (Sandbox Code Playgroud)

  • @ AlexFF1不确定我得到的问题,你的意思是我怎么知道怎么做...不确定..过了一段时间它主要是来找你:) (2认同)