当我破解leet代码任务时,我遇到了一些.sort function的意外行为,所以我无法完成任务,直到我自己实现了插入排序函数,该函数帮助我正确地对字符数组进行排序.

所以问题是: 为什么这个函数不能与所有数组成员进行比较?


function customSortString(order: string, s: string): string {
    const map={};
    for(let i=0;i<order.length;i++){
        map[order[i]]=i;
    }
    const newStr=[...s].sort((a,b)=>{
        if(map[a]===undefined || map[b]===undefined || a===b){
            return 0;
        }
        if(map[a]<map[b]){
            return -1;
        }
        return 1;
    })
    return newStr.join('');
    
};

如果我打电话给

customSortString("exv","xwvee")

它将返回"xwev",但应返回"eexvw"

here is a description of the problem enter image description here

如果我将console.log放入到排序函数中

w x
v w
e v
e w
e v
e e
e v

所以我明白了,"x"和"e"是不同的.但如果进行了比较,它将返回1,并首先显示"e",然后显示"x".

我希望我已经解释清楚了,但如果你没有解释清楚,请提出问题

推荐答案

您需要将未知字符移到末尾,值较大.

function customSortString(order, s) {
    const map = {};
    for (let i = 0; i < order.length; i++) map[order[i]] = i + 1;
    return [...s]
        .sort((a, b) => (map[a] || Infinity) - (map[b] || Infinity))
        .join('');
};

console.log(customSortString("exv", "xwvee"));

Javascript相关问答推荐

React存档iframe点击行为

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

如何分配类型脚本中具有不同/额外参数的函数类型

Google Apps脚本中的discord邀请API响应的日期解析问题

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

单击ImageListItemBar的IconButton后,在Material—UI对话框中显示图像

更改JSON中使用AJAX返回的图像的路径

构造HTML表单以使用表单数据创建对象数组

为什么按钮会随浮动属性一起移动?

如何在Vue 3中创建自定义 Select 组件,并将选项作为HTML而不是props 传递?

S文本内容和值不必要的不同

在执行异步导入之前判断模块是否已导入()

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

闭包是将值复制到内存的另一个位置吗?

创建以键值对为有效负载的Redux Reducer时,基于键的类型检测

如何限制显示在分页中的可见页面的数量

警告框不显示包含HTML输入字段的总和

FileReader()不能处理Firefox和GiB文件

与在编剧中具有动态价值的定位器交互

在Press Reaction本机和EXPO av上播放单个文件