给出如下的数组和变量。
array = ['complete','in_progress','planned'];
value = 'planned';
我想总是以'value'变量开始对数组进行排序 输出应显示。
array = ['planned','in_progress','complete'];
例如
array = ['complete','in_progress','planned'];
value = 'in_progress';
输出将是...
array = ['in_progress','complete','planned'];
我尝试了不同的方法,但未能提供一个不错的解决方案。有什么简短的主意吗?
答案 0 :(得分:1)
您可以对value
进行排序并赋予其更高的优先级-如果它与参数之一匹配,那么它将在任何东西之前进行排序。如果两项都不是value
,则只需正常排序即可。
const array = ['complete','in_progress','planned'];
const value = 'in_progress';
array.sort((a, b) => {
//a comes first
if (a == value) return -1;
//b comes first
if (b == value) return 1;
//neither matches `value` - compare them normally
return a.localeCompare(b);
});
console.log(array);
这是(通过某种方式)滥用类型强制的相同版本的较短版本:
const array = ['complete','in_progress','planned'];
const value = 'in_progress';
array.sort((a,b) => ((a == value) * -1) || b == value || a.localeCompare(b));
console.log(array);
答案 1 :(得分:0)
您可以尝试
array = ['complete','in_progress','planned'];
target = 'in_progress';
const answer = array.filter((element) => element !== target)
.sort()
.reduce((accumulator, value) => [...accumulator, value], [target]);
编辑:我忘了它需要排序。