Estoy tratando de hacer que mi código ordene dos matrices y cree un diccionario que contenga valores de ambos, pero cuando los busco, termino obteniendo valores adicionales que no quiero. Por ejemplo, mientras busco entre los símbolos 'USD', puedo terminar con XXX-USDT cuando quiero específicamente USD, no USDT. ¿Cómo puedo asegurarme de que no haya caracteres adicionales antes o después?
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]); } } }Puede usar termina con y comienza con aquí
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);Su condición if verifica si una cadena contiene -USD, no si coincide exactamente: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
Si está buscando hacer coincidir el final/inicio de la cadena, puede usar .endsWith y beginWith:
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 y https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /Global_Objects/String/startsWith como referencia)
Alternativamente, puede usar RegEx en combinación con .search (si desea obtener una matriz de caracteres coincidentes) o .match (si solo desea un índice de la primera coincidencia):
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 )