我正在尝试优化一个在JavaScript中对字符串进行二进制搜索的函数.
二进制搜索要求您知道密钥是==
枢轴还是<
枢轴.
但这需要在JavaScript中进行两次字符串比较,这与C
具有strcmp()
返回三个值(-1, 0, +1)
(小于,等于,大于)的函数的类似语言不同.
JavaScript中是否存在这样的本机函数,它可以返回三元值,以便在二进制搜索的每次迭代中只需要进行一次比较?
通过切换javascript排序函数
myArray.sort(function (a, b) {
return a.name.localeCompare(b.name);
});
Run Code Online (Sandbox Code Playgroud)
至
myArray.sort(function (a, b) {
return (a.name < b.name ? -1 : (a.name > b.name ? 1 : 0));
});
Run Code Online (Sandbox Code Playgroud)
我能够缩短在Chrome中对~1700元素阵列进行排序的时间,从1993毫秒到5毫秒.几乎是400倍的加速.不幸的是,这是以正确排序非英语字符串为代价的.
当我尝试进行排序时,显然我无法阻止我的UI阻塞2秒.有什么我可以做的,以避免可怕的缓慢localeCompare但仍然保持对本地化字符串的支持?
我正在构建一个抽象表,表中的每一列都可以包含所有数字或所有字符串.通过单击列标题可以对每列进行排序.
目前我正在使用JS本机排序并传递compareFunction:
const rows = [
{name: 'Adam', age: 27, rank: 3},
{name: 'Zeek', age: 31, rank: 1},
{name: 'Nancy', age: 45, rank: 4},
{name: 'Gramps', age: 102, rank: 2},
]
const compareFn = (x, y) => {
const sortDirValue = this.state.sortDirection === 'DESC' ? 1 : -1
if (x[this.state.sortBy] === y[this.state.sortBy]) return 0
return x[this.state.sortBy] < y[this.state.sortBy] ? sortDirValue : -sortDirValue
}
this.state = {
sortBy: 'name',
sortDirection: 'ASC'
}
rows.sort(compareFn)
console.log('---- Sorted …
Run Code Online (Sandbox Code Playgroud)这是我获得的JSON数组:
[
{
"Name" : "Sachin",
"Age" : "41",
"Team" : "Mumbai"
},
{
"Name" : "Dravid",
"Age" : "42",
"Team" : "Rajasthan"
},
{
"Name" : "Yuvraj",
"Age" : "31",
"Team" : "Bangalore"
}
]
Run Code Online (Sandbox Code Playgroud)
但是我需要通过"Age"属性对这个JSON数组desc进行排序.我想要的JSON数组应如下所示:
[
{
"Name" : "Dravid",
"Age" : "42",
"Team" : "Rajasthan"
},
{
"Name" : "Sachin",
"Age" : "41",
"Team" : "Mumbai"
},
{
"Name" : "Yuvraj",
"Age" : "31",
"Team" : "Bangalore"
}
]
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?