я пытаюсь вычесть две строки и вернуть слова в массиве - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь создать программу на JavaScript, и ниже приведен код. Моя функция должна принимать две строки (s, t) , где s - полная строка, а t - последовательность.

Например:

  • s = "i love the moon in humming world"
  • t = "i love moon world"

Выходы: ["the","in","humming"].

Я попробовал аналогичную вещь и не могу понять, почему в первый раз условие my if не запускается, но затем код работает хорошо. Может кто-нибудь, пожалуйста, помогите? Пожалуйста, позаботьтесь о том, чтобы последовательность, которую нужно было искать в том порядке, в котором они не могли искать, поэтому каждый раз, когда поиск будет продолжаться с того места, где был найден последний элемент.

код:

function missingWords(s, t)
{
var found_index = 0;
var full_string_array = s.split(" ");
var sequence_array = t.split(" ");
var array_to_return = s.split(" ");
var searching_array = s.split(" ");
for (var i= 0 ; i < sequence_array.length ; i++)
  {
    #just trying to debug the code by two lines below
    console.log(sequence_array.length)
    console.log(found_index)

    if((array_to_return.indexOf(sequence_array[i], found_index)))
      {
        found_index = array_to_return.indexOf(sequence_array[i], found_index);
        array_to_return.splice(found_index, 1)
        found_index = found_index-1;
        console.log(array_to_return);

      }
  }
 return array_to_return;
}
console.log(missingWords("i love u in the moon of humming","i love u the of"));```

output >>
5
0
5
0
[ 'i', 'u', 'in', 'the', 'moon', 'of', 'humming' ]
5
0
[ 'i', 'in', 'the', 'moon', 'of', 'humming' ]
5
0
[ 'i', 'in', 'moon', 'of', 'humming' ]
5
1
[ 'i', 'in', 'moon', 'humming' ]
[ 'i', 'in', 'moon', 'humming' ]

**desired output**>>
without i ["in","moon","humming"]

1 Ответ

0 голосов
/ 30 марта 2020

Вы можете просто использовать объект mapper и фильтр

  1. Сначала сопоставьте слова из строки t в объекте mapper в качестве ключа в качестве значения
  2. split s и фильтровать значения на основе объекта mapper, если он существует на объекте mapper и значение больше 0, мы уменьшаем его значение на 1 и возвращаем false, в противном случае возвращаем true

function missingWords(s, t) {
  let mapper = t.split(' ').reduce((op, inp) => {
    op[inp] = op[inp] || 0
    op[inp]++
    return op
  }, {})
  return s.split(' ').filter(v => {
    if (mapper[v]) {
      mapper[v]--
        return false
    }
    return true
  })
}
console.log(missingWords("i love u in the moon of humming", "i love u the of"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...