为了账号安全,请及时绑定邮箱和手机立即绑定

尝试按街道地址对对象数组进行排序,但排序又回来了,不知道如何调整我的逻辑以正确排序

尝试按街道地址对对象数组进行排序,但排序又回来了,不知道如何调整我的逻辑以正确排序

森栏 2022-07-08 16:58:58
我有一个 React/TypeScript 组件,我试图按其街道地址以升序或降序对一组 Location 对象进行排序。现在我有一个简单的内联排序函数,它比较街道地址值,并根据选择是升序(a > b)还是降序(b > a)它比较并按该顺序返回列表。我遇到的无法预料的问题是,由于街道地址属性以字符串形式返回,我认为门牌号的数值没有被正确比较,因此我的列表以看似随机排序的排序返回。例如升序将返回:13151 LAKE SHORE DR2001 ROGER ST S5101 SHANNON AVE S STE 2B2001 ROGER S ST STE B210520 ITALY S AVE我想象的预期回报将是所有以门牌号 1 开头的地址,然后是 2 号、3 号等等。这就是我的排序函数现在的样子:// Function for asccending order    if (sort === 'alphaAsc') {      filteredLocations = filteredLocations.sort((a, b) =>        a.addressLine1 > b.addressLine1 ? 1 : 0      );    }// Function for descending sort    if (sort === 'alphaDesc') {      filteredLocations = filteredLocations.sort((a, b) =>        b.addressLine1 > a.addressLine1 ? -1 : 0      );    }
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

像这样的东西应该工作:


// Function for asccending order

    if (sort === 'alphaAsc') {

      filteredLocations = filteredLocations.sort((a, b) =>

        a.addressLine1 > b.addressLine1 ? 1 : a.addressLine1 < b.addressLine1 ? -1 : 0

      );

    }



// Function for descending sort

    if (sort === 'alphaDesc') {

      filteredLocations = filteredLocations.sort((a, b) =>

        b.addressLine1 > a.addressLine1 ? -1 : a.addressLine1 < b.addressLine1 ? 1 : 0

      );

    }


查看完整回答
反对 回复 2022-07-08
?
慕森王

TA贡献1777条经验 获得超3个赞

对于每个过滤器函数,如果对象 b 应位于对象 a 之前,则返回 1,如果对象 a 应位于对象 b 之前,则返回 -1,如果对象的顺序正确,则返回 0。


if (sort === "alphaAsc") {


  filteredLocations = filteredLocations.sort((a, b) => {


  if (a.addressLine1 < b.addressLine1) return -1;

  if (a.addressLine1 > b.addressLine1) return 1;

  return 0;


  });

};


if (sort === "alphaDesc") {


  filteredLocations = filteredLocations.sort((a, b) => {


  if (a.addressLine1 > b.addressLine1) return -1;

  if (a.addressLine1 < b.addressLine1) return 1;

  return 0;


  });

};


查看完整回答
反对 回复 2022-07-08
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信