使用键值对对对象进行排序(JS)

10 浏览
0 Comments

使用键值对对对象进行排序(JS)

有一个物体,看起来像这样:

enter image description here

需要对其进行排序,结果应为:mo,tu,we,th,fr,st,su

尝试了下面的代码但不起作用:

const sortOrder = {'mo': 1, 'tu': 2, 'we': 3, 'th':4,'fr':5, 'sa':6, 'su':7}
      const res = result.map(o => Object.assign({}, ...Object.keys(o).sort((a, b) => sortOrder[a] - sortOrder[b]).map(x => { return { [x]: o[x]}})))

0
0 Comments

原因:

在JavaScript中,对对象进行排序时,需要指定排序的键。然而,有时候我们想要按照自定义的顺序对对象进行排序,而不是按照默认的升序或降序排列。这就导致了这个问题的出现。

解决方法:

为了解决这个问题,我们可以使用JavaScript的sort()方法来对对象进行排序。在这个例子中,我们想要按照自定义的顺序对对象进行排序。我们可以使用一个包含自定义顺序的数组来指定排序的键。然后,我们可以使用数组的indexOf()方法来确定每个对象在数组中的位置。最后,我们可以使用sort()方法并使用indexOf()的结果来对对象进行排序。

下面是解决这个问题的代码:

var days = ["mo","tu","we","th","fr","sa","su"];
result.sort((a,b)=> days.indexOf(a.day) - days.indexOf(b.day));

这段代码首先创建了一个包含自定义顺序的数组`days`,其中包含了一周的每一天的缩写。然后,通过调用sort()方法并传入一个比较函数,对`result`数组中的对象进行排序。

比较函数使用了箭头函数`(a,b)=>`,它接受两个参数`a`和`b`,代表了待比较的两个对象。在这个例子中,我们希望按照`day`属性的自定义顺序对对象进行排序。

在比较函数中,我们使用了indexOf()方法来获取每个对象的`day`属性在数组`days`中的位置。然后,通过将`a.day`和`b.day`的位置进行比较,我们可以确定它们之间的大小关系。如果`a.day`在`days`数组中的位置小于`b.day`,那么返回一个负数;如果`a.day`在`days`数组中的位置大于`b.day`,那么返回一个正数;如果它们的位置相同,那么返回0。

最后,sort()方法会根据比较函数的结果对对象进行排序,从而按照自定义顺序对对象进行排序。

通过使用这个方法,我们可以轻松地对对象按照自定义顺序进行排序,而不需要编写复杂的代码。

0