如何在javascript/react中根据距离对以下数组进行排序

如何在javascript/react中根据距离对以下数组进行排序,javascript,sorting,Javascript,Sorting,如何根据距离字段按升序对上述数组进行排序。请帮忙。我被困在这个使用方法中,并尝试以下方法: array: [ { distance: "4 km", name: "A", AmountDue: 58576, OrderValue: 0, Visited: "", }, { distance: "10.3 km", name: "B", AmountDue: 58576, OrderValue: 0, Vi

如何根据距离字段按升序对上述数组进行排序。请帮忙。我被困在这个

使用方法中,并尝试以下方法:

array: [
  {
    distance: "4 km",
    name: "A",
    AmountDue: 58576,
    OrderValue: 0,
    Visited: "",
  },
  {
    distance: "10.3 km",
    name: "B",
    AmountDue: 58576,
    OrderValue: 0,
    Visited: "",
  },
  {
    distance: "8 km",
    name: "C",
    AmountDue: 58576,
    OrderValue: 0,
    Visited: "",
  }
]
功能比较(a、b){
如果(a.距离b.距离){
返回1;
}
返回0;
}
排序(比较);

您需要将字符部分替换为空字符串,将其转换为
数字
,然后使用
排序
功能

简言之

function compare( a, b ) {
      if ( a.distance < b.distance ){
        return -1;
      }
      if ( a.distance > b.distance ){
        return 1;
      }
      return 0;
    }

array.sort( compare );

如果可能,您可以将距离转换为服务器上的数字。否则,请使用parseFloat()。它将忽略“km”部分


当其他单位发挥作用时,你将不得不用正则表达式解析它并转换为单个单位。例如,仪表。

您应该使用
sort()
方法。像这样试试

array.sort((a, b) => Number(a.distance.replace('km','')) > Number(b.distance.replace('km','')) ? 1 : -1)

您可以将距离作为数值,并按其增量进行排序

const
getDistance=string=>
(([number,unit])=>number*{km:1000,m:1}[unit])
(string.split(“”));
var数据=[{distance:“4km”,name:'A',AmountDue:58576,OrderValue:0,visted:”“},{distance:“10.3km”,name:'B',AmountDue:58576,OrderValue:0,visted:”},{distance:“2m”,name:'A',AmountDue:58576,OrderValue:0,visted:“}”;
排序((a,b)=>getDistance(a.distance)-getDistance(b.distance));
控制台日志(数据)

.as控制台包装{max height:100%!important;top:0;}
请看,您正在这里尝试对距离进行排序(可能是升序)。但是距离属于
string
类型,因此很难进行排序

一种方法是在API中进行更改,并将距离设置为
整数
类型。最好将距离转换为,而不是公里

现在解决你的问题

1) 您的对象中存在错误。距离:“4公里”和距离:“10.3公里”
和距离:“8公里”

2) 我们可以让用户根据距离进行排序

userArr.sort((a,b)=>{返回a.distance.split(“”)[0]-b.distance.split(“”)[0]})

其中userArr是您的对象数组

3) 由于距离是字符串格式,我们需要从字符串中提取数字部分。我们可以使用户


参考阅读此答案

据我所知,您无法真正对对象进行排序。 但是,您可以记录所有现有距离,然后根据距离计数在for循环中过滤阵列。为了避免记录相同的距离,如果两个对象中的距离相同,则需要在每个集合上使用唯一的标识符(如名称)来识别并将其从数组中删除,我在示例中添加了这样一个过程,这就是我添加对象d的原因

当使用多个距离时,您可以通过string.includes(“km”)来检测该距离,只需将包含触发器“km”的距离相乘即可。这意味着您必须首先解析这些数字,因为您将它们作为字符串提供

array.sort((a,b)=> {return a.distance.split(' ')[0] - b.distance.split(' ')[0] });
让我的={
数组:[
{
距离:“4公里”,
名称:‘A’,
应付金额:58576,
OrderValue:0,
访问:“
},
{
距离:“10.3公里”,
名称:‘B’,
应付金额:58576,
OrderValue:0,
访问:“
},
{
距离:“8公里”,
名称:‘C’,
应付金额:58576,
OrderValue:0,
访问:“
},
{
距离:“8公里”,
名称:“D”,
应付金额:12346,
OrderValue:0,
访问:“
}]
}
console.log(my.array)
分拣机(my)
功能分拣机(my)
{
array=my.array;
距离=[]
对于(i=0;ie.distance.split(“”[0]==distance[i])[0])
array=array.filter(f=>f.name!=array.filter(e=>e.distance.split(“”[0]==distance[i])[0].name)
}
console.log(newarray)
}

还有其他单位作为公里吗?是的,米和公里谢谢,它起作用了
let my = {
    array: [
    {
        distance: "4 km",
        name: 'A',
        AmountDue: 58576,
        OrderValue: 0,
        Visited: ""
    },
    {
        distance: "10.3 km",
        name: 'B',
        AmountDue: 58576,
        OrderValue: 0,
        Visited: ""
    },
    {
        distance: "8 km",
        name: 'C',
        AmountDue: 58576,
        OrderValue: 0,
        Visited: ""
    },
    {
        distance: "8 km",
        name: 'D',
        AmountDue: 12346,
        OrderValue: 0,
        Visited: ""
    }]
}
console.log(my.array)
sorter(my)

function sorter(my)
{
    array = my.array;
    distances = []
    for (i = 0; i < array.length; i++)
    {
        distances.push(array[i].distance.split(" ")[0])
    }
    distances.sort(function(a, b)
    {
        return a - b
    });
    newarray = []
    for (i = 0; i < distances.length; i++)
    {
        newarray.push(array.filter(e => e.distance.split(" ")[0] == distances[i])[0])
        array = array.filter(f => f.name != array.filter(e => e.distance.split(" ")[0] == distances[i])[0].name)
    }
    console.log(newarray)
}