代码之家  ›  专栏  ›  技术社区  ›  d-_-b

按升序对对象数组排序,但将所有零放在末尾

  •  2
  • d-_-b  · 技术社区  · 8 年前

    [{
        val: 0
    }, {
        val: 1
    }, {
        val: 0
    }, {
        val: 3
    }]
    

    如何按升序排序,但在结尾保留零,如下所示:

    [{val:1}, {val:3}, {val: 0},{val: 0}]
    

    array.sort((a,b) => {
        if (a.val === 0 || b.val === 0) return 1;
        return a.val < b.val;
    });
    
    4 回复  |  直到 8 年前
        1
  •  5
  •   Eddie    8 年前

    a.val 1 b.val -1

    var array = [{val: 0}, {val: 1}, {val: 0}, {val: 3}];
    
    array.sort((a, b) => {
      if (a.val === 0) return 1;        //Return 1 so that b goes first
      if (b.val === 0) return -1;       //Return -1 so that a goes first
      return a.val - b.val;
    });
    
    console.log(array);
        2
  •  2
  •   Nina Scholz    8 年前

    var array = [{ val: 0 }, { val: 1 }, { val: 0 }, { val: 3 }];
    
    array.sort((a, b) => (a.val === 0) - (b.val === 0) || a.val - b.val);
    
    console.log(array);
    .as-console-wrapper { max-height: 100% !important; top: 0; }
        3
  •  0
  •   amrender singh    8 年前

    请尝试以下操作:

    var arr = [{
        val: 0
    }, {
        val: 1
    }, {
        val: 0
    }, {
        val: 3
    }];
    var nonZero = arr.filter((a)=>a.val !== 0);
    var zeroArray = arr.filter((a)=>a.val === 0);
    nonZero.sort((a,b)=>(a.val -b.val));
    arr = nonZero.concat(zeroArray);
    console.log(arr);
        4
  •  0
  •   M Ciel    8 年前