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



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


Просто используйте 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?
Вы можете запустить два цикла for, но гораздо проще использовать цикл forEach.
Великолепно - ради интереса, как бы вы использовали цикл for в этом случае и где я ошибся?
Я отредактирую свой ответ, чтобы показать, как использовать цикл 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/' ] ]
relatedKeywords.map(function(value,index) {
console.info(value + ' = ' + relatedURLs[index].length + ' URLs');
});
У вас есть два несвязанных массива, которые вы зацикливаете... Либо зацикливайте только один раз, либо придумайте способ связать/сравнить массивы, чтобы печатать только тогда, когда вам нужно. Я не понимаю вопроса здесь - зачем вам нужно перебирать ключевые слова, а затем получать соответствующие URL-адреса без какой-либо дополнительной обработки? Ваш внутренний и внешний цикл здесь совершенно не связаны.