Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSX:按字母顺序排序对象_Javascript_Reactjs_Typescript_Sorting - Fatal编程技术网

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不会影响克隆数组 现在有意义的墨水-感谢您提供如此简短而优雅的解决方案!