我知道應該將未定義的值發送到結果的末尾,但是不存在的鍵呢?(不應該是一樣的嗎?)在這些情況下似乎 sort 不起作用:
const names = [
{
name: "John",
age: 27
},{
name: "Charles",
},{
name: "Ellen",
age: 30
},{
name: "Mario",
},
{
name: "Emanuelle",
age: 18
}
]
names.sort(function (a, b) {
if (a.age > b.age) return 1;
if (a.age < b.age) return -1;
return 0;
})
console.log(names) // Sort not working, prints original order
理想情況下,我想修改“名稱”陣列而不是創建/重新分配更多變數。
uj5u.com熱心網友回復:
您的默認排序解決方案設定為將專案保持在其當前位置 --> return 0。您可以提供另一個捕獲undefined并回傳 -1 的條件
const
names = [{ name: "John", age: 27 }, { name: "Charles" }, { name: "Ellen", age: 30 }, { name: "Mario" }, { name: "Emanuelle", age: 18 }];
names.sort(function (a, b) {
if(b.age === undefined) return -1;
if (a.age > b.age) return 1;
if (a.age < b.age) return -1;
return 0;
})
console.log(names) // Sort not working, prints original order
uj5u.com熱心網友回復:
因此,請檢查是否定義了年齡。如果沒有將其設定為大數以強制結束。
const names = [
{
name: "John",
age: 27
},{
name: "Charles",
},{
name: "Ellen",
age: 30
},{
name: "Mario",
},
{
name: "Emanuelle",
age: 18
}
]
function getAge (obj) {
return obj.age === undefined ? Number.MAX_VALUE : obj.age;
}
names.sort(function (a, b) {
// if (a.age === b.age) {
// return a.name.localeCompare(b.name);
// }
return getAge(a) - getAge(b);
})
console.log(names);
uj5u.com熱心網友回復:
您可以檢查該屬性,如果不存在,則將此物件移動到底部。其余的按age.
const
names = [{ name: "John", age: 27 }, { name: "Charles" }, { name: "Ellen", age: 30 }, { name: "Mario" }, { name: "Emanuelle", age: 18 }];
names.sort((a, b) =>
('age' in b) - ('age' in a) || // sort object without `age` to bottom
a.age - b.age // sort by `age`
);
console.log(names);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
排序不能正常作業,因為任何數字操作undefined都是NaNIE: 1 - undefined= NaN。
對于這種排序,您可以使用解構 默認值,試試這個:
const names = [
{
name: "John",
age: 27
},{
name: "Charles",
},{
name: "Ellen",
age: 30
},{
name: "Mario",
},
{
name: "Emanuelle",
age: 18
}
]
names.sort( ({age : agea = Number.MAX_VALUE}, {age : ageb = Number.MAX_VALUE}) => agea-ageb)
console.log(names)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/381588.html
標籤:javascript 数组 排序
