.map()函数对Jquery数组造成混淆

时间:2018-10-22 08:11:24

标签: javascript jquery arrays map-function

我正在尝试实现一些非常简单的功能,但无法完全正常工作。

我正在遍历td的{​​{1}}个子级,并试图将单元格的值放入数组中。

tr

我在做什么错了?

jsFiddle(如果有帮助)。

2 个答案:

答案 0 :(得分:3)

通常,对于类似jQuery数组的方法,第一个参数是 index ,而不是有问题的元素。另一个问题是innerText plain元素的属性,而不是jQuery集合-使用jQuery版本(.text())或不将元素转换为首先是jQuery集合:

var rows = $("#thetable").find("tr")
var test = $(rows[0]).find("td").map(function(_, x) { return x.innerText;});
console.log(test);
  <table id="thetable">
  <tr>
    <td>20</td>
    <td>2</td>
    <td>10</td>
    <td>30</td>
    <td>50</td>
  </tr>
  </table>
</div>

当然,在jQuery集合上使用.map将为您提供jQuery集合作为回报-如果您不希望这样做,请对结果调用.get()将其转换为数组< / p>

var test = $(rows[0]).find("td").map(function(_, x) { return x.innerText;}).get();

或者首先只是使用本机数组方法,而不是使用jQuery(无论如何,都不需要jQuery这样简单的东西):

const arr = Array.prototype.map.call(
  document.querySelectorAll('#thetable td'),
  td => td.textContent
);
console.log(arr);
<div id="banner-message">
  <table id="thetable">
  <tr>
    <td>20</td>
    <td>2</td>
    <td>10</td>
    <td>30</td>
    <td>50</td>
  </tr>
  </table>
</div>

答案 1 :(得分:0)

x值存储未找到的元素的索引,使用this获取当前元素,使用text()获取内部文本:

var rows = $("#thetable").find("tr")
console.log($(rows[0]).find("td"));
var test = $(rows[0]).find("td").map(function(x) {return $(this).text();});
console.log(test);

demo

要从纯数组中的jquery对象转换,请使用get()方法

console.log(test.get());