在这个引人入胜的故事中,您将详细看到有关使用JavaScript foreach的简单复杂示例。不要停止检查。
您作为开发人员JavaScript的第一天工作。
,您的第一个任务是更改PAD的所有产品卡。这些卡是网格形的:
在学习期间,您发现for for for for Ander 数组的项目执行回调函数:
-
for
: para -
each
: cada
这种解释似乎很广泛,但这就是福斯的广泛。您可以使用它做很多事情,没有这样的方法。
一个非常普遍的错误是认为它仅用于更改每个数组项目。 foreach也可以使用每一个进行另一种更改。
const names = [ 'andre', 'marcus', 'mario' ];
names.forEach(function(name) {
console.log(name);
});
在上面的示例中,foreach在控制台上的列表上写下每个名称。
审查了foreach后,您将使用document.getElementsByClassName('product-card')
拿起卡,将其置于差异并使用foreach。不大地,您使用控制台来知道一切都很好:
const productCards = document.getElementsByClassName('product-card');
productCards.forEach(function(card) {
console.log(card);
});
在©boom !!
Uncaught TypeError: document.getElementsByClassName(...).forEach is not a function
“这个数组有什么问题?!”,您认为。
首先,这不是数组,而是HTMLCollection。 阵列中有一些类型的缺陷列表。在所有这些中,只有数组和结节师都有所有的foreach 。我写了一篇有关array, nodelist, HTMLCollection e outros iteráveis em Javascript的博客文章。阅读以了解这种差异很重要。
继续前进,请知道这篇文章是JavaScript阵列主要母亲的7篇文章的一部分。我将在博客上的续集中发布附近的附近。
现在请参见这种情况的解决方案。
o todo foreach
母亲©所有foreach都存在于数组和Nodelist中。
如果您阅读了有关JavaScript Iterarables的文章,则意识到解决方案并不复杂:
- 母亲©All
getElementsByClassName
返回HTMLCollection - jãî4retorna um netdelist
因此,您需要更改获得礼物元素的方式:
const productCards = document.querySelectorAll('.product-card');
productCards.forEach(function(card) {
console.log(card);
});
现在没有错误。因此,您卸下控制台并开始真正的更改。我不会深入研究更改的类型:
const productCards = document.querySelectorAll('.product-card');
productCards.forEach(function(card) {
fazerAlteracao(card);
});
球秀。非常适合第一个早晨工作。
您去安静的午餐,您已经完成了第一项任务。但是在返回的路上,另一个议程出现在Jira中。
回调功能的索引parano
现在的挑战是另一个,但仍在产品网格上。
该网格每行有5个产品卡。现在,该人决定每行的最后一个产品将具有不同的样式。
如何仅在每行的最后一个产品中应用此样式?
要纠正,您需要记住,for for for each会收到功能作为一部分。此函数称为回调,这是一个美丽的名称,可描述您将其作为另一个功能的参数的函数。
此回调可以接收第二个parano,通常称为index
:
const productCards = document.querySelectorAll('.product-card');
productCards.forEach(function(card, index) {
// ...
});
索引是该数组内部该项目的迷,此值以零> 。
开始例如,如果您在下面运行:
const items = [ 'teclado', 'mouse', 'monitor', 'mesa' ];
items.forEach(function(item, index) {
console.log('Item: ' + item);
console.log('Index: ' + index);
console.log('---');
});
将收到以下结果:
Item: teclado
Index: 0
---
Item: mouse
Index: 1
---
Item: monitor
Index: 2
---
Item: mesa
Index: 3
---
为某些网格卡创建不同的样式将是基本的。
如果列表上的每个项目都有索引,则网格上的每张产品卡也有:
- 第一行的卡是索引0、5、10 ...
- 第二行的卡是索引1、6、11 ...
- 第三行的卡是索引2、7、12 ...
- 第四排是索引3、8、13 ...
- 第五行的卡是索引4、9、14 ...
焦点是4、9、14 ...现在,如何仅更改它们?在许多Google,Stackoverflow和Gaps之间,您会发现返回其余分裂的操作员 Mother (%)。示例:
- 3%2 = 1(Transe除以Da Da 1和 Love 1 )
- 9%5 = 4(9除以五dê1和左4 )
- 12%5 = 2(十二除以五个dãª2和左2 )
其他一些测试,您会发现,如果您在5中与妈妈一起使用它们,结果始终是相同的,4:
- 4 %5 = 4(4除以五dá0和左4 )
- 9 %5 = 4(9除以五和1和 4 )
- 14 %5 = 4(14除以五dá2和左4 )
无论结果是多少,但是在部门结束时剩下多少。
数字5在这里工作,因为它是每行卡的数量。
还记得您的Funa以前的样子吗?看看她现在的状况:
const productCards = document.querySelectorAll('.product-card');
productCards.forEach(function(card, index) {
if (index % 5 === 4) {
// alterar o estilo ao adicionar uma classe
card.classList.add('alternate-style');
} else {
// não alterar o estilo
}
});
一切都是完美的...直到需求改变...
功能回调的地铁阵列
现在一切都发生了变化。
他们不想更改每行的最后一张卡的样式。但是,更改了下半部分的样式。什么?!
是的,如果网格有16种产品,则应更改最后8的样式。目前忽略带有许多卡的网格的情况。
很酷,现在?
除了段落项目和索引外,回调功能还可以接收第三和最后一个parano仪表。他通常被称为数组,并返回您所在的列表。。
在下面的示例中:
const items = [ 'teclado', 'mouse', 'monitor', 'mesa' ];
items.forEach(function(item, index, array) {
console.log('---');
console.log('item:', item);
console.log('index:', index);
console.log('array:', array);
});
结果是:
---
item: teclado
index: 0
array: (4) ['teclado', 'mouse', 'monitor', 'mesa']
---
item: mouse
index: 1
array: (4) ['teclado', 'mouse', 'monitor', 'mesa']
---
item: monitor
index: 2
array: (4) ['teclado', 'mouse', 'monitor', 'mesa']
---
item: mesa
index: 3
array: (4) ['teclado', 'mouse', 'monitor', 'mesa']
如果您现在回到网格示例,则可以使用此Parano来支持您。
如果您访问koud6,则将收到数组项目的数量。如果您除以2,您将更接近结果。看看它的外观:
const productCards = document.querySelectorAll('.product-card');
productCards.forEach(function(card, index, array) {
const half = (array.length - 1) / 2;
if (index > half) {
// alterar o estilo ao adicionar uma classe
card.classList.add('alternate-style');
} else {
// não alterar o estilo
}
});
在这里,您会发现哪个是代表数组项数量一半的数字(half
)。然后检查当前索引是否大于该索引。如果是,它会更改卡的样式。
尽管回调功能可以接收3个Parano仪表,但您不太可能全部使用它们。我冒险说,只有第一个koud8。
您完成的90%的任务执行最后一个foreach之后,您想进行其价值并进行一些操作,por©m ...
for each返回什么?
foreach不会什么都不返回。
或更确切地说,所有功能都返回某物。但是,当您听到函数没有人返回时,它意味着它返回undefined
。 E esse é o caso do forEach:
const list = [ 'qualquer', 'coisa', 'na', 'lista' ];
const result = list.forEach(function(item) {
// executa alguma coisa com o item
});
console.log(result); // undefined
很快,您不需要创建一个差异即可接收其返回,因为返回不会有所不同。
正如我一开始所说的,foreach为每个数组的每个项目执行函数,之后它结束了该表达式。无法在foreach打电话给其他妈妈。
但是,如果您确实需要返回,则不应使用foreach,而应使用地图。地图是JavaScript中的另一个著名母亲,以及下一篇关于主要妈妈JavaScript的文章的主题。
打回来
我不是在谈论foreach哈哈回调
情况您不知道,回调是我称之为帖子的最后一章的方式。因为现在是收回您学到的东西的时刻。所以让我们走。
foreach是一个完整的javaScript,为每个数组或结节符的每个项目都执行函数。
它不仅用于从列表中更改每个项目。
如果您尝试将此母亲与其他类型的列表一起使用,例如HTMLCollection,您将收到错误。
您通知的回调功能可以接收其他parano仪表。首先是列表中的每个项目。第二个是项目。它以零开始,并以列表的总大小为少1.,第三个是您所在的数组。
foreach是一个全部归还的整个母亲。或更确切地说,总是返回koud9。
我在这篇文章中提出的问题仅出于教学目的。这意味着foreach并不是他们的最佳解决方案。如果您仍在研究开始,请忽略这一点,只专注于了解foreach的工作方式。
这和主要妈妈的附近文章非常特别。不只是因为项目需要使用,而是因为我学习了一些困难。
在博客上,我试图以您没有困难的方式解释。如果您有任何生命,就不会停止发表评论,因此我可以越来越改进解释。
感谢您的时间和阅读ð。
继续学习: