通过字符串比较对数组排序
Sort array by string comparison
var countries = ["Algeria", "Canada", "Danmark", "Estonia"];
var search = "da";
现在我想对这个列表进行排序,以便得到以下内容:
sortedCountries === ["Danmark", "Canada", "Algeria", "Estonia"]
我希望 DAnmark 排在 CanaDA 之前,因为 "da" 在该字符串的前面。
我不想按 ascending/descending 顺序排序。
您可以使用 Array.prototype.sort
:
var countries = ["Algeria", "Canada", "Danmark", "Estonia"];
var search = "da";
console.log(countries.sort((a, b) => {
a = a.toLowerCase().indexOf(search) + 1
b = b.toLowerCase().indexOf(search) + 1
if(!a && !b) return 0
else if(!a) return 1
else if(!b) return -1
else return a - b
}))
我们也可以将其写成效用函数:
var countries = ["Algeria", "Canada", "Danmark", "Estonia"]
const searchCountries = (a, s) => a.sort((a, b) => {
s = s.toLowerCase()
a = a.toLowerCase().indexOf(s) + 1
b = b.toLowerCase().indexOf(s) + 1
if(!a && !b) return 0 // don't sort if search fails for both
else if(!a) return 1 // swap results since b has a value, but a doesn't
else if(!b) return -1 // leave results since a has a value, but b doesn't
else return a - b // otherwise, sort by indexOf result
})
console.log(searchCountries(countries, 'da'))
console.log(searchCountries(countries, 'a'))
console.log(searchCountries(countries, prompt()))
var countries = ["Algeria", "Canada", "Danmark", "Estonia"];
var search = "da";
现在我想对这个列表进行排序,以便得到以下内容:
sortedCountries === ["Danmark", "Canada", "Algeria", "Estonia"]
我希望 DAnmark 排在 CanaDA 之前,因为 "da" 在该字符串的前面。 我不想按 ascending/descending 顺序排序。
您可以使用 Array.prototype.sort
:
var countries = ["Algeria", "Canada", "Danmark", "Estonia"];
var search = "da";
console.log(countries.sort((a, b) => {
a = a.toLowerCase().indexOf(search) + 1
b = b.toLowerCase().indexOf(search) + 1
if(!a && !b) return 0
else if(!a) return 1
else if(!b) return -1
else return a - b
}))
我们也可以将其写成效用函数:
var countries = ["Algeria", "Canada", "Danmark", "Estonia"]
const searchCountries = (a, s) => a.sort((a, b) => {
s = s.toLowerCase()
a = a.toLowerCase().indexOf(s) + 1
b = b.toLowerCase().indexOf(s) + 1
if(!a && !b) return 0 // don't sort if search fails for both
else if(!a) return 1 // swap results since b has a value, but a doesn't
else if(!b) return -1 // leave results since a has a value, but b doesn't
else return a - b // otherwise, sort by indexOf result
})
console.log(searchCountries(countries, 'da'))
console.log(searchCountries(countries, 'a'))
console.log(searchCountries(countries, prompt()))