实际上,我正在寻找一种解决方案,可以在其中对这些对象进行排序
tempArr =[
{
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: "4",
Chanage_From_M: "023",
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "RHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Addition" },
{
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: undefined,
Chanage_From_M: undefined,
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "LHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Deduction"
},
{
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: undefined,
Chanage_From_M: undefined,
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "RHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Deduction"
},
{
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: "0",
Chanage_From_M: "000",
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "RHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Addition"},
{
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: "0",
Chanage_From_M: "023",
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "LHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Addition"}
]
tempArr.sort(function (vote1, vote2) {
const from = vote1.Chanage_From_KM + ',' + vote1.Chanage_From_M;
const from2 = vote2.Chanage_From_KM + ',' + vote2.Chanage_From_M;
if ( vote1.calculation_type.length < vote2.calculation_type.length) {
if(vote1.side === vote2.side){
return -3;
}
}
if ( vote1.calculation_type.length > vote2.calculation_type.length){
if(vote1.side === vote2.side) {
return 1;
}
}
if ( from < from2) return -1;
});
我要按->
排序该数组简而言之,我想检查一下它的属性calculation_type是否为“ Addition”,而属性方是否为“ LHS”,那么它将首先以升序排列属性Chainage_from_KM + Chainage_from_M。 如果Property Side是'RHS',它将出现在所有LHS-添加列表之后,那么property Calculation_type是'Deduction'将会是第一个'LHS'到最后一个'RHS'。
如果感谢,请分享您的想法。
答案 0 :(得分:0)
我希望我已经正确理解了你。如果第一个排序标准相同,则多重排序必须返回1或-1,请检查第二个..第三个.. N个。
tempArr = [{
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: "4",
Chanage_From_M: "023",
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "RHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Addition"
}, {
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: undefined,
Chanage_From_M: undefined,
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "LHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Deduction"
}, {
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: undefined,
Chanage_From_M: undefined,
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "RHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Deduction"
}, {
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: "0",
Chanage_From_M: "000",
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "RHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Addition"
}, {
BOQ_Txn_ID: 1456,
Chanage_At_KM: undefined,
Chanage_At_M: undefined,
Chanage_From_KM: "0",
Chanage_From_M: "023",
Chanage_To_KM: "2",
Chanage_To_M: "003",
Date: "1/Aug/2020",
Hight_Thikness: "1.000",
Item_Code: "HOT TACK COAT",
Loose_Qty_Per_Trip: undefined,
No_Of_Trip: undefined,
QNTY: "1980.000",
Side: "LHS",
Total_Length: "1.980",
Total_Loose_Qty: undefined,
Trip_Arr: [],
Trip_By: undefined,
Type_of_Work: "Road Works",
UNIT: "Sqm",
Width: "1.000",
calculation_type: "Addition"
}];
tempArr.sort((first, second) => {
// calculation_type sort from Addition to Deduction
if (
first.calculation_type === 'Addition'
&& second.calculation_type === 'Deduction'
) {
return -1;
}
if (
first.calculation_type === 'Deduction'
&& second.calculation_type === 'Addition'
) {
return 1;
}
// Side sort from LHS to RHS
if (
first.Side === 'LHS'
&& second.Side === 'RHS'
) {
return -1;
}
if (
first.Side === 'RHS'
&& second.Side === 'LHS'
) {
return 1;
}
// Chainage_from_KM + Chainage_from_M
const firstChaninAgeFrom = parseInt(first.Chainage_from_KM + first.Chainage_from_M, 10);
const secondChaninAgeFrom = parseInt(second.Chainage_from_KM + second.Chainage_from_M, 10);
if (firstChaninAgeFrom > secondChaninAgeFrom) {
return -1;
}
if (firstChaninAgeFrom < secondChaninAgeFrom) {
return 1;
}
});
console.log(JSON.stringify(tempArr, null, ' '));