如何在JavaScript中使用foreach:详细示例
#javascript #数组 #foreach #githubbrasil

在这个引人入胜的故事中,您将详细看到有关使用JavaScript foreach的简单复杂示例。不要停止检查。

您作为开发人员JavaScript的第一天工作。

,您的第一个任务是更改PAD的所有产品卡。这些卡是网格形的:

grid de produtos em um commerce

在学习期间,您发现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个产品卡。现在,该人决定每行的最后一个产品将具有不同的样式。

grid de produtos com destaque para o último card de produto de cada linha

如何仅在每行的最后一个产品中应用此样式?

要纠正,您需要记住,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 ...

grid de produtos com destaque para o índice de cada card de produto

焦点是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不会什么都不返回。

或更确切地说,所有功能都返回某物。但是,当您听到函数没有人返回时,它意味着它返回undefinedE 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的工作方式。

这和主要妈妈的附近文章非常特别。不只是因为项目需要使用,而是因为我学习了一些困难。

在博客上,我试图以您没有困难的方式解释。如果您有任何生命,就不会停止发表评论,因此我可以越来越改进解释。

感谢您的时间和阅读ð。

继续学习: