Как использовать следующий индекс массива в условии for..of + if в Javascript?

Я создаю фильтр слов, который, если индекс 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;
  }
}

используйте обычный for(let i; i < ...), чтобы вы могли сделать i + 1

0stone0 25.01.2023 15:06

... или используйте .forEach(), который передает индекс обратному вызову.

Pointy 25.01.2023 15:06

@Pointy, который не может работать, обратите внимание, что код пытается return.

CherryDT 25.01.2023 15:07

@CherryDT о да, ну может тогда .find() или .findIndex().

Pointy 25.01.2023 15:09

Вы хотите массив some()

epascarello 25.01.2023 15:09

или for (let [i, word] of textContainer.entries()) { для доступа к кортежам [index, value] записей массива.

pilchard 25.01.2023 16:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
70
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Используйте обычный 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);

это то, что я должен был сделать с первой попытки. Спасибо!

Deviruchi D Devourer 25.01.2023 15:56

или for (let [i, word] of textContainer.entries()) {

pilchard 25.01.2023 16:06

Вы можете использовать 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))

это определенно выглядит более удобным для чтения. Хотя мне придется изучить это сначала, чтобы лучше понять это. Спасибо!

Deviruchi D Devourer 25.01.2023 15:57

Я не знал, что вы хотели с оператором return, я думал, что у вас есть функция. Я переписал его как функцию, я использую some, потому что он возвращает true, если найдено, и false, если нет.

mplungjan 25.01.2023 16:04

также несколько непрозрачная стенография .some((word, i, {[i+1]: nextWord}) =>

pilchard 25.01.2023 16:08

цикл 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));

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