Цикл по одному массиву и многомерному массиву в JavaScript

Я только начинаю работать с JavaScript и хочу перебрать массив, а затем сопоставить его со значением объема строк в массиве 2d. Это то, что у меня есть до сих пор:

const relatedKeywords = ['keyword1','keyword2','keyword3'];
const relatedURLs = 
[ [ 'https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/' ],
  [ 'https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/' ],
  [ 'https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/' ] ]

      for (let y = 0; y < relatedKeywords.length; y++) {

        for (let z = 0; z < relatedURLs[0].length; z++) {
          console.info(relatedURLs[z].length)
        }
      }

Это возвращает объем URL-адресов в массиве 2d, но повторяется 6 раз. В идеале я хочу добраться до точки, где результаты выглядят так:

Keyword1 = 2 URLs
Keyword2 = 2 URLs
Keyword3 = 2 URLs

У вас есть два несвязанных массива, которые вы зацикливаете... Либо зацикливайте только один раз, либо придумайте способ связать/сравнить массивы, чтобы печатать только тогда, когда вам нужно. Я не понимаю вопроса здесь - зачем вам нужно перебирать ключевые слова, а затем получать соответствующие URL-адреса без какой-либо дополнительной обработки? Ваш внутренний и внешний цикл здесь совершенно не связаны.

Matt Clark 08.03.2019 01:55

Я запутался, почему у вас есть второй цикл, похоже, ваша цель - просто console.info(relatedURLs[y].length) без второго цикла

Steven Stark 08.03.2019 01:55
Поведение ключевого слова "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
2
273
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Просто используйте forEach с литеральной строкой шаблона, например:

const relatedKeywords = ['keyword1', 'keyword2', 'keyword3'];
const relatedURLs = [
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ],
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ],
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ]
];

relatedKeywords.forEach((item, index) => {
  console.info(`${item} = ${relatedURLs[index].length} URLs`);
});

Синтаксис ES5, если он вам понадобится:

const relatedKeywords = ['keyword1', 'keyword2', 'keyword3'];
const relatedURLs = [
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ],
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ],
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ]
];

relatedKeywords.forEach(function(item, index) {
  console.info(item + " = " + relatedURLs[index].length + " URLs");
});

С петлей for:

const relatedKeywords = ['keyword1', 'keyword2', 'keyword3'];
const relatedURLs = [
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ],
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ],
  ['https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/'
  ]
];

for (var index = 0; index < relatedKeywords.length; index++) {
  let item = relatedKeywords[index];
  console.info(item + " = " + relatedURLs[index].length + " URLs");
}

Это здорово - спасибо! Сможете ли вы когда-нибудь запустить 2 цикла for в этом случае или вы всегда будете запускать цикл forEach?

Andrew Charlton 08.03.2019 02:07

Вы можете запустить два цикла for, но гораздо проще использовать цикл forEach.

Jack Bashford 08.03.2019 02:16

Великолепно - ради интереса, как бы вы использовали цикл for в этом случае и где я ошибся?

Andrew Charlton 08.03.2019 02:23

Я отредактирую свой ответ, чтобы показать, как использовать цикл for - в основном, вы слишком много раз повторяли внутренний цикл и не делали то, что вам нужно было делать.

Jack Bashford 08.03.2019 02:24

Я бы просто использовал карту массива и обработал ее так, как это требуется для

const relatedKeywords = ['keyword1','keyword2','keyword3'];
const relatedURLs = 
[ [ 'https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/' ],
  [ 'https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/' ],
  [ 'https://en.wikipedia.org/wiki/Coffee',
    'https://www.joscoffee.com/' ] ]

    
relatedKeywords.map(function(value,index) {
  console.info(value + ' = ' + relatedURLs[index].length + ' URLs');
});

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