将字符串收集到forEach内部的单个数组中

Collect strings into single array inside forEach

本文关键字:单个 数组 内部 forEach 字符串      更新时间:2023-09-26

如何将字符串结果收集到每个循环内部的单个数组中

<ul>
    <li data-tag="two"></li>
    <li data-tag="three"></li>
    <li data-tag="four"></li>
    <li data-tag="five"></li>
</ul>
<button id="ev">Click</button>

JavaScript:

var elem = Array.prototype.slice.call(document.querySelectorAll('ul > li'));
document.getElementById('ev').addEventListener('click', function(ev){
    elem.forEach( function(el,i) {
        var ar = ["one"];
        var tags = el.getAttribute('data-tag');
        ar.push(tags);
    });
});

结果:

["one", "two"]
["one", "three"]
["one", "four"]
["one", "five"]

预期结果:

["one", "two", "three", "four", "five"]

forEach 之前初始化arr

var elem = Array.prototype.slice.call(document.querySelectorAll('ul > li'));
document.getElementById('ev').addEventListener('click', function(ev) {
    var ar = ["one"];
  
    elem.forEach( function(el,i) {
        var tags = el.getAttribute('data-tag');
        ar.push(tags);
    });
  
    console.log(ar);
});
<ul>
    <li data-tag="two"></li>
    <li data-tag="three"></li>
    <li data-tag="four"></li>
    <li data-tag="five"></li>
</ul>
<button id="ev">Click</button>

问题是在forEach函数中声明ar变量,该函数会覆盖值,而不是将它们推入数组。

var ar = ['one'];
elem.forEach( function(el,i) {
  var tags = el.getAttribute('data-tag');
  ar.push(tags);
});