Я создаю фильтр слов, который, если индекс 1 = собака и индекс 2 = кошка, вернет true. Что я должен поместить в следующий индекс для слова?
let textContainer = ['bird', 'dog', 'cat', 'snake', 'rabbit', 'ox', 'sheep', 'tiger'];
for (let word of textContainer) {
if (word === 'dog' && (next index for word) === 'cat') {
return true;
}
}... или используйте .forEach(), который передает индекс обратному вызову.
@Pointy, который не может работать, обратите внимание, что код пытается return.
@CherryDT о да, ну может тогда .find() или .findIndex().
Вы хотите массив some()
или for (let [i, word] of textContainer.entries()) { для доступа к кортежам [index, value] записей массива.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте обычный for (let i = 0; i < textContainer.length; i++), чтобы вы могли проверить i + 1
let textContainer = ['bird', 'dog', 'cat', 'snake', 'rabbit', 'ox', 'sheep', 'tiger'];
function checkTextArray() {
for (let i = 0; i < textContainer.length; i++) {
if (textContainer[i] === 'dog' && textContainer[i + i] === 'cat') {
return true;
}
}
return false;
}
const res = checkTextArray()
console.info(res);это то, что я должен был сделать с первой попытки. Спасибо!
или for (let [i, word] of textContainer.entries()) {
Вы можете использовать Array.find или Array.some
find возвращает «собаку», которая не является неопределенной (так правдиво), если собака находится рядом с кошкой.
some вернет true, если собака или кошка найдены, и false, если нет
Поскольку ваши комментарии показывают, что вам нужна функция true/false, я сделал ее для вас.
const textArray = ['bird', 'dog', 'cat', 'snake', 'rabbit', 'ox', 'sheep', 'tiger'];
const areAdjacent = (word1, word2, arr) => arr
.some((word, i, arr) => word===word1 && arr[i+1] === word2);
console.info(areAdjacent("dog","cat",textArray))
console.info(areAdjacent("tiger","bird",textArray))На примере Пилчарда
const textArray = ['bird', 'dog', 'cat', 'snake', 'rabbit', 'ox', 'sheep', 'tiger'];
const areAdjacent = (word1, word2, arr) => arr
.some((word, i, {[i+1]: nextWord}) => word === word1 && nextWord === word2);
console.info(areAdjacent("dog", "cat", textArray))
console.info(areAdjacent("tiger", "bird", textArray))это определенно выглядит более удобным для чтения. Хотя мне придется изучить это сначала, чтобы лучше понять это. Спасибо!
Я не знал, что вы хотели с оператором return, я думал, что у вас есть функция. Я переписал его как функцию, я использую some, потому что он возвращает true, если найдено, и false, если нет.
также несколько непрозрачная стенография .some((word, i, {[i+1]: nextWord}) =>
цикл for of не позволит вам сделать это. Вы можете сделать это с помощью обычного цикла for или while, но массивы имеют встроенные методы, которые упрощают выполнение.
Вы хотите использовать some(), который позволит вам получить индекс и сослаться на массив, который вы перебираете, чтобы получить следующий индекс.
let textContainer = ['bird', 'dog', 'cat', 'snake', 'rabbit', 'ox', 'sheep', 'tiger'];
const result = textContainer.some((text, index, array) => text === 'dog' && array[index+1] === 'cat');
console.info(result);Если вы хотите узнать, где он находится в массиве, это будет findIndex()
let textContainer = ['bird', 'dog', 'cat', 'snake', 'rabbit', 'ox', 'sheep', 'tiger'];
const result = textContainer.findIndex((text, index, array) => text === 'dog' && array[index+1] === 'cat');
console.info(result);Вы можете использовать метод indexOf для возврата индекса определенного элемента, затем используйте индекс + 1, чтобы найти следующий элемент для данного в массиве.
Код может быть таким:
let textContainer =
[ "bird",
"dog",
"cat",
"snake",
"rabbit",
"ox",
"sheep",
"tiger",];
for (let word of textContainer) {
var index = textContainer.indexOf(word);
if (word === "dog" && textContainer[index + 1] === "cat") {
console.info("Cat is next of Dog!");
// return true;
//if you're inside a function.
}
}Удачи!
На самом деле вам вообще не нужна явная итерация. Вы можете просто получить indexOf() первое слово, а затем просто получить доступ к следующему элементу.
let textArray = ['bird', 'dog', 'cat', 'snake', 'rabbit', 'ox', 'sheep', 'tiger',];
const areAdjacent = (word1, word2, arr) => {
const i = arr.indexOf(word1);
return i !== -1 && arr[i + 1] === word2;
};
console.info(areAdjacent('dog', 'cat', textArray));
console.info(areAdjacent('tiger', 'bird', textArray));Или, если вы привязаны к однолинейному функциональному решению, оберните его в IIFE.
let textArray = ['bird', 'dog', 'cat', 'snake', 'rabbit', 'ox', 'sheep', 'tiger',];
const areAdjacent = (word1, word2, arr) =>
((i) => i !== -1 && arr[i + 1] === word2)(arr.indexOf(word1));
console.info(areAdjacent('dog', 'cat', textArray));
console.info(areAdjacent('tiger', 'bird', textArray));
используйте обычный
for(let i; i < ...), чтобы вы могли сделатьi + 1