Я хочу перебрать массив фраз и сравнить элементы с заданной строкой, а затем создать новый массив общих элементов. Я новичок в 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);
}
}
Это не так, он хочет, чтобы результат был @Весы
Разделите пользовательский ввод с помощью разделителя " ".
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. Кроме того, в нем отсутствует объяснение того, что вы делаете и как это решит вопрос. На данный момент это ответ только для кода, который, возможно, непонятен ОП без дополнительных подробностей.
В настоящее время вы проверяете, включают ли пользовательские входы целое число (индекс). вы должны изменить его, как показано ниже:
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; Как мне это сделать?
Я не очень понимаю, как этот код создает вывод, который вы показываете, пересечение - это логическое значение.