function sortedPeopleArray(peopleArray) {
arrayCopy = [...peopleArray];
function compare(a, b) {
const nameA = a.name.toUpperCase();
const nameB = b.name.toUpperCase();
let comp = 0;
if (nameA > nameB) {
comp = 1;
} else if (nameA < nameB) {
comp = -1;
}
return comp;
}
arrayCopy.sort(compare);
arrayCopy.sort(function(a,b) {
return (a.satisfaction - b.satisfaction) * -1;
});
arrayCopy.sort(function(a,b) {
return (a.rating - b.rating) * -1;
});
arrayCopy.sort(function(a,b) {
return (a.age - b.age) * -1;
});
return arrayCopy;
}
我試圖根據陣列的所有屬性值對陣列進行排序,但我的函式沒有回傳所需的輸出。有沒有更好的方法來解決這個問題?
我將如何按以下順序對物件陣列(下面的代碼)進行排序:
- 年齡(從高到低)
- 評級(從最高到最低)
- 滿意度(從高到低)
- 姓名(按字母順序)
這些屬性在排序時完全按照該順序考慮
如果兩個值相等,則查看串列中的下一個屬性以確定首先放置哪個人。例如。如果兩個人的評分相同,那么滿意度較高的人排在第一位
const array = [
{
name: A
age: 22
rating: 5
satisfaction: 2
},
{
name: B
age: 25
rating: 7
satisfaction: 4
},
{
name: C
age: 22
rating: 9
satisfaction: 8
},
];
輸出的陣列應該是
result = [
{ name: B,
age: 25,
rating: 7,
satisfaction: 4,
},
{ name: C
age: 22
rating: 9
satisfaction: 8
},
{ name: A
age: 22
rating: 5
satisfaction: 2
},
];
uj5u.com熱心網友回復:
您需要一個接一個地應用比較,由“或”( ||) 運算子鏈接。如果發現第一個引數是真實的,即如果它回傳一個不同于 0 的值,or 運算子將不會處理它的第二個引數。
比較數字最容易通過簡單的減法來完成。字串可以與String.prototype.localeCompare():
const arr = [{name: "A",age: 22,rating: 5,satisfaction: 2},{name: "B",age: 25,rating: 7,satisfaction: 4},{name: "C",age: 22,rating: 9,satisfaction: 8}];
arr.sort((a,b)=>
b.age-a.age ||
b.rating-a.rating ||
b.satisfaction-a.satisfaction ||
b.name.localeCompare(a.name))
console.log(arr);
uj5u.com熱心網友回復:
在一個功能中進行所有比較。
function compare(oA, oB)
{
if(oA.age == oB.age)
{
if(oA.rating == oB.rating)
{
if(oA.satisfaction == oB.satisfaction)
{
const nameA = oA.name.toUpperCase();
const nameB = oB.name.toUpperCase();
let comp = 0;
if (nameA > nameB) {
comp = 1;
} else if (nameA < nameB) {
comp = -1;
}
return comp;
}
else
{
return oB.satisfaction - oA.satisfaction;
}
}
else
{
return oB.rating - oA.rating;
}
}
else
{
return oB.age - oA.age;
}
}
const array = [
{
name: 'A',
age: 22,
rating: 5,
satisfaction: 2
},
{
name: 'B',
age: 25,
rating: 7,
satisfaction: 4
},
{
name: 'C',
age: 22,
rating: 9,
satisfaction: 8
},
];
let arrayCopy = [...array];
arrayCopy.sort(compare);
console.log(arrayCopy)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/488775.html
標籤:javascript 数组 排序
