Как я могу проверить элементы в массиве, которые находятся в строке?

Я хочу перебрать массив фраз и сравнить элементы с заданной строкой, а затем создать новый массив общих элементов. Я новичок в Javascript. Ответы, которые я нашел в своем исследовании, не касаются моей конкретной потребности.

Я намерен перебрать myArray и проверить в нем элементы, найденные в userInput, и сохранить их в переменной intersect как новый массив. Я намереваюсь получить что-то вроде этого: ["утро", "добро", "доброе утро"] в результате, но я, кажется, не понимаю, как это сделать правильно. Ниже приведен код, который я пробовал. Как я уже сказал, я новичок в Javascript.

var userInput, myArray, intersect;
userInput "hey good morning bro";
myArray = ["today", "morning", "good", "good morning"];

for (i=0;i<myArray.length;i++){
intersect = userInput.includes(i);
document.write(intersect);
}
}

Я не очень понимаю, как этот код создает вывод, который вы показываете, пересечение - это логическое значение.

Libra 10.01.2023 22:52

Это не так, он хочет, чтобы результат был @Весы

Bernard Borg 10.01.2023 22:57
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему &apos;[] instanceof Object&apos; возвращает &quot;true&quot;?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
1
2
62
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Разделите пользовательский ввод с помощью разделителя " ".

const userInput =  "hey good morning bro";
const myArray = ["today", "morning", "good", "good morning"];

let intersection = [];
const stringParts = userInput.split(" ");

for (let i = 0; i < myArray.length; i++) {
     if (stringParts.includes(myArray[i])) {
          intersection.push(myArray[i]);
     }
}

console.info(intersection);

Обратите внимание, что вывод появится в консоли, но вы можете изменить console.info, если хотите (хотя я рекомендую console.info для тестирования).

Также не используйте var. Используйте const для всего, что не изменится, и используйте let для всего остального.

Попробуйте этот код, чтобы получить массив общих элементов:

var userInput = "hey good morning bro";
var myArray = ["today", "morning", "good", "good morning"];
var intersect = [];

$.each(myArray, function(index, val) {
    if (userInput.indexOf(val) != -1){
        intersect.push(val);
    }
});

console.info(intersect);

Следует отметить, что это jQuery, а не ванильный JS. Кроме того, в нем отсутствует объяснение того, что вы делаете и как это решит вопрос. На данный момент это ответ только для кода, который, возможно, непонятен ОП без дополнительных подробностей.

tacoshy 10.01.2023 23:12

В настоящее время вы проверяете, включают ли пользовательские входы целое число (индекс). вы должны изменить его, как показано ниже:

var userInput, myArray, intersect;
userInput = "hey good morning bro";
myArray = ["today", "morning", "good", "good morning"];

for (i=0; i<myArray.length; i++)
{
  intersect = userInput.includes(myArray[i]);
  document.write(intersect + ' => ' + myArray[i] + " #</br> ");
}
Ответ принят как подходящий

Прокрутите myArray с помощью метода filter. Этот метод является частью набора инструментов, который можно найти в каждом массиве.

Метод filter перебирает каждый элемент в вашем массиве, в данном случае это такие строки, как "today", "morning" и т. д. Он будет проверять каждую строку, если она найдена в строке userInput. Если это так, то возвращается true, что означает, что слово может быть частью нового массива. Если результат false, то слово не будет включено в новый массив.

const userInput = "hey good morning bro";
const myArray = ["today", "morning", "good", "good morning"];

const intersect = myArray.filter(word => 
  userInput.includes(word)  
);
  
console.info(intersect);

У меня есть небольшая проблема: если у меня есть «i» как часть myArray и я запускаю приведенный выше код, «i» также будет отображаться как одно из пересечений, потому что слово «утро» в userInput имеет букву «i» в это. Я хотел бы исключить такое появление, за исключением того, что «i» выступает как отдельное слово в userInput; Как мне это сделать?

Dieudonne Tambah 30.01.2023 22:55

Другие вопросы по теме