2 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
嘿,您可以使用排序函數(shù)中的屬性簡(jiǎn)單地對(duì)數(shù)組進(jìn)行排序。
升序a[property] - b[property]
降序b[property] - a[property]
按名稱排序是將所有名稱轉(zhuǎn)換為一個(gè)數(shù)組,對(duì)它們進(jìn)行排序,然后循環(huán)進(jìn)行排序。這運(yùn)行起來n^2
所以值得研究?jī)?yōu)化,但這會(huì)讓你越過終點(diǎn)線。
name
注意:此功能將不起作用undefined
。
const list = [
{
name: 'compass',
kills: 35,
assists: 312
},
{
name: 'another one',
kills: 52,
assists: 32
},
{
name: 'another anothe one',
kills: 12,
assists: 30
}
]
const sortByString = () => {
const strings = list.map(prop => prop.name).sort();
let sorted = [];
for(const idx in strings){
let currString = strings[idx];
for(const objIdx in list){
console.log(currString, list[objIdx].name)
if(list[objIdx].name === currString){
sorted.push(list[objIdx]);
}
}
}
return sorted;
}
const dynamicSortByType = (property) => {
return typeof list[0][property] === 'string' ?
sortByString() : list.sort((a,b) => a[property] - b[property])
}
console.log(dynamicSortByType('name'))

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
簡(jiǎn)短回答:
你只是漏掉了這個(gè)詞else。
長(zhǎng)答案:
你有一個(gè)看起來像這樣的塊
if () {
}
if () {
}
else {
}
應(yīng)該是這樣的:
if () {
}
else if () {
}
else {
}
請(qǐng)注意else在第二個(gè)之前添加了if。如果沒有它,第二個(gè) if-else 將運(yùn)行,最后的 else 將取代第一個(gè) 的 true 情況所做的設(shè)置if。
例如,任何時(shí)候if (a[property] < b[property]) {,它實(shí)際上都會(huì)落入秒數(shù)if并else導(dǎo)致設(shè)置result = 0。
這是您進(jìn)行了微小修復(fù)的片段:
const list = [
{
name: 'compass',
kills: 35,
assists: 312
},
{
name: 'another one',
kills: 52,
assists: 32
},
{
name: 'another anothe one',
kills: 12,
assists: 30
}
];
const sortByType = (property) => {
return function (a, b) {
let result;
if (a[property] < b[property]) {
result = -1;
}
else if (a[property] > b[property]) { /* FIXED: added `else` on this line */
result = 1;
}
else {
result = 0;
}
return result;
};
}
let newList = list.sort(sortByType('kills'));
console.log(newList);
添加回答
舉報(bào)