gpt4 book ai didi

javascript - 对字符串列表进行排序并优先选择更接近起始索引的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:39:45 24 4
gpt4 key购买 nike

创建一个在您键入时显示结果的网络组件。目前我有如下字符串列表:

[
'Aaeaca Bi',
'Aegaca Bd',
'Biah gi',
'dBciag ch',
'Ghiad dl',
]

要在用户键入“B”时进行搜索,目前我得到的结果是:

'Aaeaca Bi',
'Aegaca Bd',
'Biah gi',
'dBciag ch'

但我想要:

'Biah gi',
'dBciag ch',
'Aegaca Bd',
'Aaeaca Bi',

我希望搜索结果优先考虑更接近起始索引的结果。

我该如何解决这个问题?

最佳答案

根据字符串的indexOf的不同排序,在数组项中查找:

const arr = [
'Aaeaca Bi',
'Aegaca Bd',
'Biah gi',
'dBciag ch',
'Ghiad dl',
'xxxx',
];
const strToFind = 'B';
const result = arr
.filter(str => str.includes(strToFind))
.sort((a, b) => a.indexOf(strToFind) - b.indexOf(strToFind))
console.log(result);

在这种情况下可能无关紧要(对于给定的一段代码,性能很少如此),但您可以将计算复杂度降低到O(n) 而不是 O(n log n) 通过使用计数排序而不是内置的 .sort

如果希望搜索不区分大小写,将初始数组转为同时包含小写版本和原始版本的数组,然后通过检查小写版本进行操作,最后映射到原始版本:

const arr = [
'Aaeaca Bi',
'Aegaca Bd',
'Biah gi',
'dBciag ch',
'Ghiad dl',
'xxxx',
'aabaa'
];
const casedArr = arr.map(str => [str.toLowerCase(), str]);
const strToFind = 'B'.toLowerCase();
const result = casedArr
.filter(([str]) => str.includes(strToFind))
.sort((a, b) => a[0].indexOf(strToFind) - b[0].indexOf(strToFind))
.map(([, origCasedStr]) => origCasedStr);
console.log(result);

关于javascript - 对字符串列表进行排序并优先选择更接近起始索引的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57405543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com