给定初始值始终为第一的对象数组排序

时间:2019-10-25 05:55:00

标签: javascript typescript sorting

给出如下的数组和变量。

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'];

我尝试了不同的方法,但未能提供一个不错的解决方案。有什么简短的主意吗?

2 个答案:

答案 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]);

编辑:我忘了它需要排序。