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

Javascript 将给定初始值的对象数组排序为始终第一,javascript,typescript,sorting,Javascript,Typescript,Sorting,给定如下数组和变量 array = ['complete','in_progress','planned']; value = 'planned'; 我希望数组总是以'value'变量开始排序 应显示输出 array = ['planned','in_progress','complete']; 例如 输出将是 array = ['in_progress','complete','planned']; 我尝试了不同的方法,但没有找到一个像样的解决办法。有什么简单明了的想法吗?从我的头顶上你

给定如下数组和变量

array = ['complete','in_progress','planned'];
value = 'planned';
我希望数组总是以'value'变量开始排序 应显示输出

array = ['planned','in_progress','complete'];
例如

输出将是

array = ['in_progress','complete','planned'];

我尝试了不同的方法,但没有找到一个像样的解决办法。有什么简单明了的想法吗?

从我的头顶上你可以试试

array = ['complete','in_progress','planned'];
target = 'in_progress';

const answer = array.filter((element) => element !== target)
    .sort()
    .reduce((accumulator, value) => [...accumulator, value], [target]);

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

您可以排序并为
值赋予更高的优先级
-如果它匹配其中一个参数,那么它将被排序在任何参数之前。如果这两项都不是
,则只需正常排序即可

const数组=[“完成”、“进行中”、“计划中”];
常量值='正在进行';
array.sort((a,b)=>{
//a是第一位的
if(a==值)返回-1;
//b是第一位的
如果(b==值)返回1;
//两者都不匹配“值”-请正常比较
返回a.localeCompare(b);
});

console.log(数组)为什么减少?我不认为在数组前面添加值是这个方法的时间和地点。您可以使用
unshift
添加到前端。如果您真的想在一个连续的操作中完成它,那么为什么不直接执行
[target].concat(/*filter+sort*/)
?这也不是很好,但至少它没有使用
reduce
来处理一个如此琐碎的操作。是的,concat实际上在解决这个问题上要好得多。首先想到的是使用reduce。在第一个示例中,为什么要将
的“complete”
移到末尾?它既不保留原始的相对位置,也不按字母顺序排序
array = ['complete','in_progress','planned'];
target = 'in_progress';

const answer = array.filter((element) => element !== target)
    .sort()
    .reduce((accumulator, value) => [...accumulator, value], [target]);