使用forEach,[]。forEach.call(...)或Array.prototype.

我们可以使用以下两种方法在类似数组的对象上实现迭代:


let arrayLike = document.getElementsByClassName('dummy');


[].forEach.call(arrayLike, (e) => {

  console.log(e);

});

<div class = "dummy">Test1</div>

<div class = "dummy">Test2</div>

或者使用slice先将类似数组的对象转换为数组:


let arrayLike = document.getElementsByClassName('dummy');


Array.prototype.slice.call(arrayLike).forEach((e) => {

  console.log(e);

});

<div class = "dummy">Test1</div>

<div class = "dummy">Test2</div>

哪一个更可取,为什么在我不需要转换后的类似数组的对象的情况下呢?第一个感觉有点“ hacky”,但是第二个感觉更具可读性。还是两者都一样,这意味着两者都可以吗?


ibeautiful
浏览 280回答 3
3回答

幕布斯6054654

您可以Array.from将像对象这样的数组转换为真实数组。然后使用一些数组方法进行迭代。let array = Array.from(document.getElementsByClassName('dummy'));array.forEach((e) => {&nbsp; &nbsp; console.log(e);});<div class = "dummy">Test1</div><div class = "dummy">Test2</div>

catspeake

您还可以使用传播语法[...document.getElementsByClassName('dummy')].forEach((e) => {&nbsp; e.classList.add('test')});.test {&nbsp; color: green;}<div class="dummy">Test1</div><div class="dummy">Test2</div>

吃鸡游戏

使用Array.from,slice或...(展开):var divs = [...document.getElementsByClassName('dummy')]divs.forEach(d => console.log(d));var divs2 = Array.from(document.getElementsByClassName('dummy'));divs2.forEach(d => console.log(d));var divs3 = Array.from(document.getElementsByClassName('dummy'));divs3.forEach(d => console.log(d));<div class="dummy">Test1</div><div class="dummy">Test2</div>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript