我有一个对象数组,比如:
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/