Javascript JSX:按字母顺序排序对象
我有两个类似的函数:Javascript JSX:按字母顺序排序对象,javascript,reactjs,typescript,sorting,Javascript,Reactjs,Typescript,Sorting,我有两个类似的函数: const compare = (direction: string) => { const alphabetize = (a, b) => { if (direction === "alpha") { if (a.name < b.name) { return -1; } if (a.name > b.name) { return 1;
const compare = (direction: string) => {
const alphabetize = (a, b) => {
if (direction === "alpha") {
if (a.name < b.name) {
return -1;
}
if (a.name > b.name) {
return 1;
}
} else if (direction === "reverseAlpha") {
if (a.name > b.name) {
return -1;
}
if (a.name < b.name) {
return 1;
}
}
return 0;
};
};
const sortAlphabetically = () => {
setState(state => ({
...state,
items: items.sort(compare("alpha"))
}));
};
我需要能够以某种方式将字符串传递到compare函数中,这告诉它按字母顺序或逆字母顺序对字母进行排序的方式
但是这个方法不起作用,因为字母顺序从来没有这样叫过。我错过了什么
谢谢大家! [edit]您必须在比较函数内部调用字母顺序,如下所示:
const compare = () => {
const alphabetize = () => {
...stuff
}
alphabetize()
}
还有一个旁注:
JS带有排序和反转功能:
var sortAlphabets = (text, direction) =>
direction === "reverseAlpha"
? text
.split("")
.sort()
.reverse("")
.join("")
: text
.split("")
.sort()
.join("");
[编辑]必须在比较函数内部调用字母顺序,如下所示:
const compare = () => {
const alphabetize = () => {
...stuff
}
alphabetize()
}
还有一个旁注:
JS带有排序和反转功能:
var sortAlphabets = (text, direction) =>
direction === "reverseAlpha"
? text
.split("")
.sort()
.reverse("")
.join("")
: text
.split("")
.sort()
.join("");
您可以尝试以下简短的解决方案: const data=['zoo'、'river'、'dimond'、'man'、'football'、'hot']; //当sort更改原始数组时,保留另一个排序的数据数组。您也可以对'data'数组执行此操作。这也会给你同样的结果。 常量克隆=[…数据]; 常量比较=方向=>{ 如果方向=='asc'{ 返回a,b=>a>b?1:-1; }如果方向=='desc'{ 返回a,b=>b>a?1:-1; } } console.log'Asc order:',data.sortcompare'Asc'; console.log'Desc order:',clone.sortcompare'Desc';
.作为控制台包装{最小高度:100%!重要;顶部:0;}您可以尝试以下简短解决方案: const data=['zoo'、'river'、'dimond'、'man'、'football'、'hot']; //当sort更改原始数组时,保留另一个排序的数据数组。您也可以对'data'数组执行此操作。这也会给你同样的结果。 常量克隆=[…数据]; 常量比较=方向=>{ 如果方向=='asc'{ 返回a,b=>a>b?1:-1; }如果方向=='desc'{ 返回a,b=>b>a?1:-1; } } console.log'Asc order:',data.sortcompare'Asc'; console.log'Desc order:',clone.sortcompare'Desc'; .as控制台包装{最小高度:100%!重要;顶部:0;}您可以使用。您的代码将如下所示 常数sortAlphabetically==>{ setStatestate=>{ 状态 items:items.sorta,b=>sort=='alpha'?a.localeCompareb:-1*a.localeCompareb }; }; 你可以用。您的代码将如下所示 常数sortAlphabetically==>{ setStatestate=>{ 状态 items:items.sorta,b=>sort=='alpha'?a.localeCompareb:-1*a.localeCompareb };
};看起来你忘了按字母顺序返回;在比较器的末尾返回字母顺序==>{}@AnuragSrivastava-否!这将创建一个隐式全局变量,或者在严格限制的情况下抛出一个异常mode@RobinZigmond这是绝对正确的。此外,只需实现升序排序、捕获结果,就可以显著减少代码量,如果要求降序,则将结果乘以-1。啊,非常感谢您的有用反馈和建议-是的,效果非常好!一开始我确实有它,但一开始叫错了,看起来你忘了按字母顺序返回;在比较器的末尾返回字母顺序==>{}@AnuragSrivastava-否!这将创建一个隐式全局变量,或者在严格限制的情况下抛出一个异常mode@RobinZigmond这是绝对正确的。此外,只需实现升序排序、捕获结果,就可以显著减少代码量,如果要求降序,则将结果乘以-1。啊,非常感谢您的有用反馈和建议-是的,效果非常好!一开始我确实有,但一开始我说错了谢谢!你放console.log'Asc order:'和data.sortcompare'Asc'有什么原因吗;而不是console.log'Asc order:',clone.sortcompare'Asc';?这不会使原来的数组发生变异吗?我找不到你。你能描述一下吗?你说。排序改变了原始数组,这是你例子中的数据。然后将数据元素复制到克隆中。那么,你是不是想让克隆人。sortcompare'asc';?在您的第一个console.log语句中?或者我误解了?实际上,首先我声明了数据数组,然后将数据复制到新的数组克隆中,然后对数据数组进行排序,该数据数组对数据数组进行排序,但在执行排序操作之前复制了原始数据。所以data.sort不会影响克隆阵列。哦,我认为这现在是有意义的-感谢您提供了如此简短而优雅的解决方案!非常感谢。你放console.log'Asc order:'和data.sortcompare'Asc'有什么原因吗;而不是console.log'Asc order:',clone.sortcompare'Asc';?这不会使原来的数组发生变异吗?我找不到你。你能描述一下吗?你说。排序改变了原始数组,这是你例子中的数据。然后将数据元素复制到克隆中。那么,你是不是想让克隆人。sortcompare'asc';?在您的第一个console.log语句中?或者我误解了?实际上,首先我声明了数据数组,然后将数据复制到新的数组克隆中,然后对数据数组进行排序,该数据数组对数据数组进行排序,但在执行排序操作之前复制了原始数据。所以data.sort不会影响克隆数组 现在有意义的墨水-感谢您提供如此简短而优雅的解决方案!