我如何总是把香蕉排在苹果之后?
arr = [
{ 'id' : 1, 'fruit' : 'apple' },
{ 'id' : 2, 'fruit' : 'banana' },
{ 'id' : 3, 'fruit' : 'custard' },
{ 'id' : 4, 'fruit' : 'banana' },
{ 'id' : 5, 'fruit' : 'apple' },
{ 'id' : 6, 'fruit' : 'custard' }
];
预期:
arr = [
{ 'id' : 1, 'fruit' : 'apple' },
{ 'id' : 3, 'fruit' : 'custard' },
{ 'id' : 5, 'fruit' : 'apple' },
{ 'id' : 2, 'fruit' : 'banana' },
{ 'id' : 4, 'fruit' : 'banana' },
{ 'id' : 6, 'fruit' : 'custard' }
];
所以香蕉应该总是出现在苹果之后,或者苹果应该排在香蕉之前。
这就是我尝试过的:
arr.sort(function(a, b) {
return (a.fruit === 'banana') - (b.fruit === 'banana')
})
但在本例中,香蕉总是在数组的末尾进行排序,这不是我想要的。所有“香蕉”项目应自动排序在最后一个“苹果”项目之后
2条答案
按热度按时间q9yhzks01#
你可以简单地按
item2
(按字母顺序)。这将根据以下内容按字母顺序排列所有记录:
item2
.但是,如果您希望执行最小数量的掉期,那么我建议您不要使用
sort
,但通过从两端开始使两个索引彼此接近来循环数组:1yjd4xko2#
这将在第一步中将阵列分成两部分:
res[true]
包含所有“香蕉”元素和res[false]
所有其他的。在第二步中,阵列res[true]
是.splice()
-他被送进了监狱res[false]
最后一个索引“apple”后的数组。