javascript - 按属性值对对象的javascript数组进行排序并按条件重新排序

标签 javascript arrays sorting object

我有一个对象数组,比如:

    var newArray = [
      {value : "P1"},
      {value : "P2/S2"},
      {value : "P2"},
      {value : "P1"},
      {value : "P1/S2"},
      {value : "P1/S3"},
      {value : "P2/S1"},
      {value : "P1/S3"},
      {value : "P2/S2"},
      {value : "P1"},
      {value : "P2"},
      {value : "P3"}
    ];
    
    function compare( a, b ) {
      if ( a.value < b.value ){
        return -1;
      }
      if ( a.value > b.value ){
        return 1;
      }
      return 0;
    }
    
    newArray.sort( compare );
    console.log(newArray);

[{"value":"P1"},{"value":"P1"},{"value":"P1"},{"value":"P1/S2"},{"value":"P1/S3"},{"value":"P1/S3"},{"value":"P2"},{"value":"P2"},{"value":"P2/S1"},{"value":"P2/S2"},{"value":"P2/S2"},{"value":"P3"}]

但是如果P值之后没有S值,我在这里重新排列排序。如果没有 S 值,P 值应该是低优先级。我期待这样的结果:

[{"value":"P1/S2"},{"value":"P1/S3"},{"value":"P1/S3"},{"value":"P1"},{"value":"P1"},{"value":"P1"},{"value":"P2/S1"},{"value":"P2/S2"},{"value":"P2/S2"},{"value":"P2"},{"value":"P2"},{"value":"P3"}]

最佳答案

您可以添加后缀并将较小的字符串排序到底部。

function compare({ value: a }, { value: b }) {
    a += 'ZZZ';
    b += 'ZZZ';
    return a > b || -(a < b);
}

var array = [{ value: "P1" }, { value: "P2/S2" }, { value: "P2" }, { value: "P1" }, { value: "P1/S2" }, { value: "P1/S3" }, { value: "P2/S1" }, { value: "P1/S3" }, { value: "P2/S2" }, { value: "P1" }, { value: "P2" }, { value: "P3" }];
   
array.sort(compare);

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 按属性值对对象的javascript数组进行排序并按条件重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59407010/

相关文章:

javascript - Dojo Ajax post 发送非表单数据

javascript - 从 php 重定向后无法运行 <Script>

javascript - 将值传递到 p5 的 Canvas 中,实例化

c++ - 这个未知大小数组的列表初始化在 C++0x 中有效吗?

javascript - 在javascript中分配新数组

Java 对 Excel 的多个列表进行排序

javascript - 如何在单个页面上检查多个表单的必填字段?

php - 归档 mysql 数据抛出内存限制问题

ios - 被 NSMutableArray sortUsingDescriptors : exception 搞糊涂了

excel - 根据列 "L"按升序对范围进行排序