javascript - 通过字符串比较对数组进行排序
问题描述
var countries = ["Algeria", "Canada", "Danmark", "Estonia"];
var search = "da";
现在我希望对这个列表进行排序,以便得到以下信息:
sortedCountries === [“丹麦”、“加拿大”、“阿尔及利亚”、“爱沙尼亚”]
我希望 DAnmark 出现在 CanaDA 之前,因为在该字符串的前面找到了“da”。我不希望按升序/降序进行排序。
解决方案
您可以使用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()))
推荐阅读
- python - 根据来自另一个 csv 文件的数据从 Pandas 读取一个 csv 文件
- python - Python 和 Tkinter 中有哪些等宽字体?
- javascript - Object.entries(),为什么我的数组默认按数字排序?
- javascript - javascript中的赋值和显示值不相同
- angular - JHipster:实体下拉列表为空白
- javascript - 如何删除 Iframe 滚动条但应加载整页?
- sql - 如何连接两个表并创建一个新表以使用sql检查哪个表值存在
- html - 为什么我不能嵌套里面
?
- tsql - 如何在 Azure 数据仓库中声明数组变量?
- php - Wordpress 自定义字段不显示该部分