把字符串按照特定的字母顺序进行排序的js代码



function sortStringBySpecificOrder(str, order) {
    // 创建一个映射对象,用于根据order数组指定字母的排序顺序
    const orderMap = {};
    let orderIndex = 0;
    for (const char of order) {
        orderMap[char] = orderIndex++;
    }

    // 使用数组的sort方法,通过比较器函数对字符串的字符进行排序
    return str.split('').sort((a, b) => {
        // 如果两个字符都在order中,则按照order的顺序进行排序
        if (orderMap[a] !== undefined && orderMap[b] !== undefined) {
            return orderMap[a] - orderMap[b];
        }
        // 如果一个字符在order中,另一个不在,则将order中的字符排在前面
        if (orderMap[a] !== undefined) {
            return -1;
        }
        if (orderMap[b] !== undefined) {
            return 1;
        }
        // 如果两个字符都不在order中,则按照字符的Unicode码点进行排序
        return a.localeCompare(b);
    }).join('');
}

// 示例使用
const str = "banana";
const order = "anb";
console.log(sortStringBySpecificOrder(str, order)); // 输出 "banan"

这段代码定义了一个`sortStringBySpecificOrder`函数,它接受一个字符串`str`和一个特定的字母顺序数组`order`。函数内部首先创建了一个映射对象`orderMap`,用于记录`order`数组中每个字母的排序索引。然后,使用`split('')`将字符串分割成字符数组,并通过`sort()`方法进行排序。排序过程中,通过比较器函数根据`orderMap`中的索引来决定字符的排序顺序。如果字符在`order`中,则按照`order`的顺序排序;如果字符不在`order`中,则按照字符的Unicode码点进行排序。最后,使用`join('')`将排序后的字符数组重新组合成字符串并返回。