检查字符串是否包含没有额外字符的子字符串?



我试图让我的代码对两个数组进行排序,并创建一个包含来自两者的值的字典,但是当我搜索它们时,我最终得到了我不想要的额外值。例如,在搜索"USD"符号时,当我特别想要USD而不是USDT时,我可以以XXX-USDT结束。我怎样才能确保前面或后面没有多余的字符?

var symbols = ['ETH', 'BTC', 'USD', 'USDT'];
var marketPairs = ['AAVE-USD', 'AAVE-USDT', 'AAVE-BTC', 'AAVE-ETH'];
var marketDict = {};
for (let i = 0; i < symbols.length; i++) {
marketDict[symbols[i]] = [];
for (let j = 0; j < marketPairs.length; j++) {
if (marketPairs[j].includes('-'+symbols[i]) || marketPairs[j].includes(symbols[i]+'-')) {
marketDict[symbols[i]].push(marketPairs[j]);
}
}
}

你可以在这里使用endsWith和startsWith

marketPairs[j].endsWith("-" + symbols[i]) || marketPairs[j].startsWith(symbols[i] + "-")

var symbols = ["ETH", "BTC", "USD", "USDT"];
var marketPairs = ["AAVE-USD", "AAVE-USDT", "AAVE-BTC", "AAVE-ETH"];
var marketDict = {};
for (let i = 0; i < symbols.length; i++) {
marketDict[symbols[i]] = [];
for (let j = 0; j < marketPairs.length; j++) {
if (
marketPairs[j].endsWith("-" + symbols[i]) ||
marketPairs[j].startsWith(symbols[i] + "-")
) {
marketDict[symbols[i]].push(marketPairs[j]);
}
}
}
console.log(marketDict);

if条件检查字符串是否包含-USD,而不是是否完全匹配:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes

如果你想匹配字符串的结束/开始,你可以使用。endswith和startsWith:

if (marketPairs[j].endsWith('-'+symbols[i]) || marketPairs[j].startsWith(symbols[i]+'-'))

(参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith)

或者,您可以将RegEx与.search(如果您想要获得匹配字符的数组)或.match(如果您只想要第一个匹配的索引)结合使用:

if (marketPairs[j].match(new RegExp(symbols[i] + '|' + symbols[j])) > -1)

(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp)

最新更新