使用localeCompare的字母比较器Javascript
我正在尝试创建一个比较器,它返回大于、小于和等于的true或false。我找到了localeCompare函数,它比较两个字符串并返回1,0或-1。我尝试返回正确或错误,如下所示,但这种方法不起作用。这怎么行使用localeCompare的字母比较器Javascript,javascript,reactjs,Javascript,Reactjs,我正在尝试创建一个比较器,它返回大于、小于和等于的true或false。我找到了localeCompare函数,它比较两个字符串并返回1,0或-1。我尝试返回正确或错误,如下所示,但这种方法不起作用。这怎么行 let ComparatorAlphabetical = (item) => { let _isGreaterThan = if(item.localeCompare(item2) == 1) => true; let _isLessThan = if(item
let ComparatorAlphabetical = (item) => {
let _isGreaterThan = if(item.localeCompare(item2) == 1) => true;
let _isLessThan = if(item.localeCompare(item2) == -1) => false;
let _isEqualTo = if(item.localeCompare(item2) == 0) => false;
return {
isGreaterThan: _isGreaterThan,
isLessThan: _isLessThan,
isEqualTo: _isEqualTo
}
}
这个比较器将用于创建排序函数
let createSortFunc = (comparator) => (ascending) => {
let condition = ascending ? (comparator(item).isGreaterThan(item2)) : (comparator(item).isLessThan(item2));
return (array => array.sort(({ shortName: item1 }, { shortName: item2 }) => (!comparator(item1).isEqualTo(item2)) ?
(condition ? 1 : -1) :
0));
}
我猜你在找这样的东西:
let ComparatorAlphabetical = (item) => {
let _isGreaterThan = (i) => item.localeCompare(i) == 1;
let _isLessThan = (i) => item.localeCompare(i) == -1;
let _isEqualTo = (i) => item.localeCompare(i) == 0;
return {
isGreaterThan: _isGreaterThan,
isLessThan: _isLessThan,
isEqualTo: _isEqualTo
}
}
但我同意James Coyle的观点,你似乎把事情复杂化了。如果你试图根据
升序布尔值对数组进行排序,你可以创建一个乘数
值并将其设置为1或-1。然后将其乘以localeCompare
返回的值:
let input=[{shortName:'b'},{shortName:'a'},{shortName:'Z'}]
函数排序(数组,升序){
常数倍乘器=递增?1:-1;
返回array.sort((a,b)=>multiplier*a.shortName.localeCompare(b.shortName))
}
log(排序(输入,true))//升序
console.log(sort(input,false))//降序
赋值表达式右侧不能有if
语句。还有什么是item2
也不需要let=item.localeCompare(item2)==1如果你能用示例输入和预期输出来解释你的需求,你会得到一个更好的解决方案。你实际上想做什么?你似乎把事情搞得太复杂了,这似乎是一个错误。与其要求我们修复您尝试的解决方案,不如发布输入、预期输出和清晰的问题陈述。我认为您和James是对的,我把事情复杂化了。这是可行的,但我想我正在重新思考整件事。谢谢everyone@marijn您是否试图根据字母顺序对数组进行排序,并且方向是基于升序
布尔值?@marijn如果工作,您能接受答案吗?是的,我认为重新思考一下你的设计会很好;)@阿迪加是的,这就是我想要的trying@Romain因为倒计时的缘故,我还不能去,但现在已经结束了