首页 > 解决方案 > 返回带有条件的字符串

问题描述

如果用户输入是一个陷阱,这是一个返回字符串的代码(我发送了,他们是)。解释对我来说是另一个问题,所以让我们看一下代码:

let trapSt = 'I was sent = I sent. they are = they is'; // correct version = trap version

// prepare the trapSt and make an array
trapSt = trapSt.toLowerCase().replace(/\s+/g, " ").split(".").map(s => s.trim());
trapSt = trapSt.filter(s => s);

console.log(trapSt);

// return the whole part of string if user inputs the trap
function findTrap(str) {
  let trapPairs = trapSt.map(s => s.split(' = '));
  console.log(trapPairs)
  let matchI = trapPairs.findIndex(([first]) => first === str);
  return trapSt[matchI] || false;
};

let findTrapResult = findTrap('i was sent'); // should return false
//let findTrapResult = findTrap('i sent'); // should return "i was sent = i sent" because it's a trap
console.log(findTrapResult);

问题是代码与我想要的完全相反,我需要一个人来修复它。

标签: javascript

解决方案


rfestag 的回答会奏效。

我会提出另一种可能的解决方案:将陷阱版本视为键,以便您可以映射到结果。我们可以从陷阱字符串中创建一个对象并查找结果,如果没有匹配,则返回false

const trapSt = 'I was sent = I sent. they are = they is'

const traps = Object.fromEntries(
  trapSt
    .toLowerCase()
    .split('.')
    .map((fullStr) => {
      const trap = fullStr.split('=')[1].trim()

      return [trap, fullStr.trim()]
    }),
)

const findTrap = (str) => traps[str] || false

console.log(findTrap('i was sent'))
console.log(findTrap('i sent'))


推荐阅读