代码之家  ›  专栏  ›  技术社区  ›  Onyx

我正在按数字属性对数组排序,但现在我想使用字符串属性应用第二个排序。我可以吗?[副本]

  •  -1
  • Onyx  · 技术社区  · 5 年前

    let array = [
        { name: "Apple", number: "1" },
        { name: "John", number: "2" },
        { name: "Car", number: "1" },
        { name: "Tiger", number: "1" },
        { name: "Jeep", number: "2" },
        { name: "Bee", number: "1" },
        { name: "Zoo", number: "2" },
        { name: "Cow", number: "9" },
        { name: "Pet", number: "6" },
    ]
    

    现在我使用number属性对这个数组进行排序,结果如下:

    let array = [
        { name: "Apple", number: "1" },
        { name: "Car", number: "1" },
        { name: "Tiger", number: "1" },
        { name: "Bee", number: "1" },
        { name: "Zebra", number: "2" },
        { name: "Jeep", number: "2" },
        { name: "Quake", number: "2" },
        { name: "Pet", number: "6" },
        { name: "Cow", number: "9" }, 
    ]
    

    这是通过使用这个函数来完成的

        sortedByNumber(array){
            return array.sort((a, b) => a.number - b.number)
        },
    

    我想知道是否也可以使用name属性对数组排序,以便元素按字母顺序排列,同时保持数字顺序。结果应该是这样的:

    let array = [
        { name: "Apple", number: "1" },
        { name: "Bee", number: "1" },
        { name: "Car", number: "1" },
        { name: "Tiger", number: "1" },
        { name: "Jeep", number: "2" },
        { name: "Quake", number: "2" },
        { name: "Zebra", number: "2" },
        { name: "Pet", number: "6" },
        { name: "Cow", number: "9" },
    ]
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Joseph    5 年前

    我想这就是你想要的

    console.log(array.sort((a, b) => {
        if (a.number > b.number) return 1;
        if (a.number < b.number) return -1;
    
        if (a.name > b.name) return 1;
        if (a.name < b.name) return -1;
    }))
    

    [
      {
        "name": "Apple",
        "number": "1"
      },
      {
        "name": "Bee",
        "number": "1"
      },
      {
        "name": "Car",
        "number": "1"
      },
      {
        "name": "Tiger",
        "number": "1"
      },
      {
        "name": "Jeep",
        "number": "2"
      },
      {
        "name": "John",
        "number": "2"
      },
      {
        "name": "Zoo",
        "number": "2"
      },
      {
        "name": "Pet",
        "number": "6"
      },
      {
        "name": "Cow",
        "number": "9"
      }
    ]
    
        2
  •  1
  •   Siva Kondapi Venkata    5 年前

    let array = [
      { name: "Apple", number: "1" },
      { name: "John", number: "2" },
      { name: "Car", number: "1" },
      { name: "Tiger", number: "1" },
      { name: "Jeep", number: "2" },
      { name: "Bee", number: "1" },
      { name: "Zoo", number: "2" },
      { name: "Cow", number: "9" },
      { name: "Pet", number: "6" }
    ];
    
    const strCompare = (a, b) => {
      if (b > a) {
        return -1;
      }
      if (a > b) {
        return 1;
      }
      return 0;
    };
    
    const compare = (a, b) => {
      if (a.number === b.number) {
        return strCompare(a.name, b.name);
      }
      return Number(a.number) - Number(b.number);
    };
    
    array.sort(compare);
    
    console.log(array)