假设我们有这样的数组:

const words = ['luigi', 'Bar', 'Test', 'zac1', 'Alf0'];

现在我想按字母顺序对这个数组进行排序:

words.sort((a, b) => a.localeCompare(b));

想象一下,我们有一系列超级单词.这些单词具有很高的优先级,应该在"单词列表"的顶部.

const superWords = ["zac1", "Test"]

因此,单词数组的预期结果将是:

const desiredResult = ["Test", "zac1","Alf0", "Bar", "luigi"]

我该怎么做?

推荐答案

superWordsArray(其中nsuperWords中的字数)时,可以使用hassuperWords转换为Set,而不是使用includessuperWords转换为Set:

const words = ['luigi', 'Bar', 'Test', 'zac1', 'Alf0'];
const superWords = ['zac1', 'Test'];
const superWordsSet = new Set(superWords); // This is O(n) but you only need to do this once.
words.sort((a, b) => {
    if (superWordsSet.has(a) && !superWordsSet.has(b)) {
        return -1;
    } else if (!superWordsSet.has(a) && superWordsSet.has(b)) {
        return 1;
    }
    return a.localeCompare(b);
});
console.log(words);

表演

Set has方法判断值是否在Set对象中,使用的方法平均比测试之前添加到Set对象中的大多数元素更快.尤其是,当Array对象的length等于Set对象的size时,平均而言,它比Array.prototype.includes方法快.

Javascript相关问答推荐

在React中获取数据后,如何避免不必要的组件闪现1秒?

字节数组通过echo框架传输到JS blob

react—router v6:路由没有路径

使用LocaleCompare()进行排序时,首先使用大写字母

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

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

如何在ASP.NET JavaScript中使用Google Charts API仅对绘制为负方向的条形图移动堆叠条形图标签位置

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

VUE 3捕获错误并呈现另一个组件

不能将空字符串传递给cy.containes()

在使用位板时,如何在Java脚本中判断Connect 4板中中柱的对称性?

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

Google脚本数组映射函数横向输出

我想使用GAS和HTML将从Electron 表格中获得的信息插入到文本字段的初始值中

Clip-Path在网页浏览器(Mozilla、Edge、Chrome)上不能正常工作,但在预览版Visual Code Studio HTML、CSS、JS上却能很好地工作

将以前缓存的 Select 器与querySelector()一起使用

在JS/TS中构造RSA公钥

Reaction路由v6.4+数据API:重试加载程序而不显示错误

此上下文在JavaScript中

我在JS代码中收到超过最大调用堆栈大小的错误,但我找不到原因.有谁能帮我搬一下吗?