将数组的一个元素移动到末尾位置,另一个元素移动到前置位置,其余元素应保持原有顺序。

3
我有一个数组:['B', 'D', 'I', 'M', 'Other', 'T', 'U']。
我想将它排序为:['T', 'B', 'D', 'I', 'M', 'U', 'Other']。
我应该如何使用 JavaScript 实现它?

1
你的排序标准是什么? - Unmitigated
没有任何条件。只需将字母T移动到数组的开头,将单词“other”移动到数组的末尾。 - Denis
1
听起来像是标准啊...哈哈 - epascarello
你尝试使用自定义排序函数了吗? - epascarello
1
我尝试了这段代码,但它没有起作用:sort((x) => x ==='T'? -1 : x === 'Other' ? 1 : 0 ) - Denis
2个回答

3

你是否只是想将这个确切的数组中的两个值移动到数组的其他位置?如果是这样,假设你的原始数组名为arr,你可以这样做:

let startSplice = arr.splice(5,1)
let endSplice = arr.splice(4,1)

arr.unshift(startSplice[0])
arr.push(endSplice[0])

但我不会真正称其为“排序”。在数组上下文中排序通常意味着您对数组顺序有设置规则,对于数组中的每个元素都是如此,并且您可能会遇到需要按这些规则进行排序的各种类型的数组。
如果您的规则只是“如果我遇到'T',则将其放在数组开头”,并且“如果我遇到'其他',则将其放在末尾”,那么您可以这样做:
arr.sort((a,b) => {
    if (a === 'Other') {
        return 1
    } else if (a === 'T') {
        return -1
    } else if (b === 'Other') {
        return -1
    } else if (b === 'T') {
        return 1
    } else {
        return 0
    }
})

2
数组包含字符串。我编辑了问题,谢谢。 - Denis

3
您可以使用包含顺序的对象对数组进行排序。

const
    array = ['B', 'D', 'I', 'M', 'Other', 'T', 'U'],
    order = { T: -1, Other: Number.MAX_VALUE };

array.sort((a, b) => (order[a] || 0) - (order[b] || 0));

console.log(...array);


是的,我就是想做这个。谢谢! - Denis
太好了!也许这个大数太大了,一个也可以工作。 - Nina Scholz
这是一个非常聪明的答案。 - JCollier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接